2017-04-04 10 views
0

私はGoogleのicalendarファイルを持っています。これを私のMacにインポートすると、日付は "DTEND" 2017-09-02になります。それも同様です。 私はphpの解析でファイルを使用する場合、私に日付 "DTEND" 2017-09-03を与えるでしょう。 正しい日付を取得するには何が必要ですか?助けのためのgoogle icalendarをMySQLにインポート

BEGIN:VCALENDAR 
PRODID:-//Google Inc//Google Calendar 70.9054//EN 
VERSION:2.0 
CALSCALE:GREGORIAN 
METHOD:PUBLISH 
X-WR-CALNAME:xxx 
X-WR-TIMEZONE:Europe/Berlin 
X-WR-CALDESC:xxx 
BEGIN:VTIMEZONE 
TZID:Etc/UTC 
X-LIC-LOCATION:Etc/UTC 
BEGIN:STANDARD 
TZOFFSETFROM:+0000 
TZOFFSETTO:+0000 
TZNAME:GMT 
DTSTART:19700101T000000 
END:STANDARD 
END:VTIMEZONE 
BEGIN:VTIMEZONE 
TZID:Europe/Berlin 
X-LIC-LOCATION:Europe/Berlin 
BEGIN:DAYLIGHT 
TZOFFSETFROM:+0100 
TZOFFSETTO:+0200 
TZNAME:CEST 
DTSTART:19700329T020000 
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU 
END:DAYLIGHT 
BEGIN:STANDARD 
TZOFFSETFROM:+0200 
TZOFFSETTO:+0100 
TZNAME:CET 
DTSTART:19701025T030000 
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU 
END:STANDARD 
END:VTIMEZONE 


BEGIN:VEVENT 
DTSTART;VALUE=DATE:20170826 
DTEND;VALUE=DATE:20170903 
DTSTAMP:20170115T115800Z 
UID:7eecd830-1ee2-4c8f-82fb-e4f3283916d6 
CLASS:PUBLIC 
CREATED:20161204T172327Z 
DESCRIPTION:DUMMY 
LAST-MODIFIED:20161204T172327Z 
LOCATION: 
SEQUENCE:1 
STATUS:CONFIRMED 
SUMMARY:DUMMY 
TRANSP:OPAQUE 
END:VEVENT 


END:VCALENDAR 

PHP

$ical = new iCalendar(); 
$ical->parse($filename); 
$ical_data = $ical->get_all_data(); 

$end_dttimearr = explode('T', $data['DTEND']);   
$date_end = date_create($end_dttimearr[0]); 
$end = date_format($date_end, 'Y-m-d'); 

おかげで

+0

iCalendar PHPクラスはどこから来たのですか?標準のPHPビルドの一部ではありません。バグがあります。あなたのスクリプトはどのタイムゾーンで実行されていますか? PHPのタイムゾーンを$ data ['X-WR-TIMEZONE']に設定するだけではどうですか? – symcbean

答えて

0

おそらく、このように、それを修正しますdate_create()関数にタイムゾーンのparamを追加:

$date_end = date_create($end_dttimearr[0],data["X-WR-TIMEZONE"]); 

あなたがすべきDTSTART計算でも同じ操作を行います。

関連する問題