php - iCalendar 夏令时

标签 php calendar outlook icalendar

我使用以下代码在文件中生成日期:

echo "DTSTART;TZID=" . date_default_timezone_get() . ":" . strftime('%Y%m%d', strtotime($app->app_start)) . 'T' . strftime('%H%M%S', strtotime($app->app_start)) . '' . $eol;
echo "DTEND;TZID=" . date_default_timezone_get() . ":" . strftime('%Y%m%d', strtotime($app->app_end)) . 'T' . strftime('%H%M%S', strtotime($app->app_end)) . '' . $eol;

这总是能正常工作。但是现在我们处于夏令时,所有处于夏令时的约会在我的 Outlook 中都晚了 1 小时。 DST 之前的约会是可以的。

因此,例如在我的 ics 中:

DTSTART;TZID=欧洲/布鲁塞尔:20150318T083000 DTEND;TZID=欧洲/布鲁塞尔:20150318T090000

这在我的日历中正确显示,从 08:30 到 09:00

DTSTART;TZID=欧洲/布鲁塞尔:20150407T083000 DTEND;TZID=欧洲/布鲁塞尔:20150407T090000

这是我的问题,它在我的日历中显示不正确:从 09:30 到 10:30。

我该如何解决这个问题?

最佳答案

您需要确保您的 ics 文件包含时区定义,例如

BEGIN:VTIMEZONE
TZID:US Mountain Standard Time
BEGIN:STANDARD
RRULE:FREQ=YEARLY;BYMONTH=0;BYDAY=+10SU
DTSTART:16010000T000000
TZOFFSETFROM:-0700
TZOFFSETTO:-0700
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
BEGIN:STANDARD
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=+11SU
DTSTART:16011101T020000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
END:STANDARD
BEGIN:DAYLIGHT
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=+12SU
DTSTART:16010302T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
END:DAYLIGHT
END:VTIMEZONE

关于php - iCalendar 夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29413413/

相关文章:

vba - 如何使用宏删除 Outlook 2003 中选定邮件的特定类别?

php - Web 应用程序管理员生成器

java - 计算当前时间与某一天之间的时间

excel - 在指定日期范围内将 Outlook 电子邮件从最旧到最新导入 Excel

javascript - 谷歌日历日期格式说明

Python calendar.month_name 如何跳过 0-index

css - 对 Outlook 使用背景图像并居中,无间隙

php - 从 php 调用 javascript 函数

php - Symfony 2 + Doctrine 2 + 继承

php - php 上的奇怪命名空间问题