0

指定された場所に応じてタイムゾーンが動的である PHP で ics ファイルを動的に生成しようとしています。すべて正常に動作しますが、夏時間の問題があります。つまり、時差が 1 時間ほど表示されます。この問題を解決するには、DAYLIGHT動的に使用する必要があります。しかし、それを動的に使用する方法、または指定されたタイムゾーンに関連するオフセットTZOFFSETFROMをどこから取得できるかわかりません。TZOFFSETTO

例えば:

    $timeZone = "America/Denver" // dynamically fetched from DB

      $ical = "BEGIN:VCALENDAR\n";
      $ical .= "VERSION:2.0\n";
      $ical .= "PRODID:-//LokalMotion//LokalMotion Events v1.0//EN\n";
      $ical .= "CALSCALE:GREGORIAN\n";
      $ical .= "METHOD:PUBLISH\n";
      $ical .= "X-WR-CALNAME:LokalMotion Events\n";
      $ical .= "X-MS-OLK-FORCEINSPECTOROPEN:TRUE\n";
      $ical .= "BEGIN:VTIMEZONE\n";
      $ical .= "TZID:{$timeZone}\n";
      $ical .= "TZURL:http://tzurl.org/zoneinfo-outlook/{$timeZone}\n";
      $ical .= "X-LIC-LOCATION:{$timeZone}\n";
      $ical .= "END:VTIMEZONE\n";
      $ical .= "BEGIN:VEVENT\n";
      $ical .= "DTSTAMP:".date('Ymd\THis\Z')."\n";
      $ical .= "DTSTART;TZID={$timeZone}:{$start_date}\n";
      $ical .= "DTEND;TZID={$timeZone}:{$end_date}\n";
      $ical .= "STATUS:CONFIRMED\n";
      $ical .= "SUMMARY:{$title}\n";
      $ical .= "DESCRIPTION:{$description}\n";
      $ical .= "ORGANIZER;CN=Reminder:MAILTO:support@mysite.com\n";
      $ical .= "CLASS:PUBLIC\n";
      $ical .= "CREATED:{$start_date}Z\n";
      $ical .= "LOCATION:{$location}\n";
      $ical .= "URL:http://www.mysite.com\n";
      $ical .= "SEQUENCE:1\n";
      $ical .= "LAST-MODIFIED:".date('Ymd\THis\Z')."\n";
      $ical .= "UID:{$title}-support@mysite.com\n";
      $ical .= "END:VEVENT\n";
      $ical .= "END:VCALENDAR";    

echo $ical;

場所に応じて昼光を動的に使用する方法、場所が「アメリカ/カラカス」になるように..など

$ical .= "BEGIN:DAYLIGHT";
$ical .= "TZOFFSETFROM:{}"; //I need this dynamic
$ical .= "TZOFFSETTO:{}";//I need this dynamic
$ical .= "TZNAME:EDT";
$ical .= "DTSTART;TZID={$timeZone}:{$start_date}\n";
$ical .= "RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU";
$ical .= "END:DAYLIGHT";

前もって感謝します。

4

1 に答える 1

-1

時刻と日付を変換する前に、使用しているゾーンの時間特性をエンジンが認識できるように、PHP で正しいタイムゾーンを設定する必要があります。

date_default_timezone_set('America/Mexico_City');
$start_date = date('c', time());   // ISO date 8601 of "right now"
$start_zone = date('O', time());   // TZOFFSETFROM format  of "right now"

date_default_timezone_set('America/Denver');
$to_zone = date('O', time());   // TZOFFSETTO of "right now"

これが役立つことを願っています

于 2013-05-14T13:35:45.197 に答える