首页 > 解决方案 > Google 日历中的开始日期和结束日期都相差 1 天

问题描述

我有一些 php 代码动态生成 .ics 文件以供下载。我传递了08/01/2019的开始日期值,当它成功导入 ical / google 日历时,它会关闭一天,尽管纪元时间戳是正确的。我不确定我在这里缺少什么。

我尝试将日期重新格式化为不同的日期字符串,而不是将其转换为 ical 所需的格式,这会导致 1969 年 1 月 1 日。我正在使用 WordPress date_i18n() 函数将日期格式化为预期值。

$dateVal; // contains 08/01/2019    
$dtstart = date_i18n("Ymd\THis\Z", strtotime( $dateVal) );

// output: 20190801T000000Z

当事件进入日历时,它显示我的日期为 2019 年 7 月 31 日下午 6 点,而不是 2019 年 8 月 1 日的预期值

有什么想法可以调试吗?

标签: phpdateicalendar

解决方案


认为正在发生的是:

您的活动应该在您所在时区的 8/01/2019 进行,基于明显的偏移量似乎是 UTC+6。

格式字符串中的\Z表示该事件在 UTC 时间 2019 年 8 月 1 日举行,因此当您在日历上看到它时,它会根据您的时区进行调整,因此会减去 8 小时。

尝试离开\Z,我认为它应该只使用您当地的时区。

或将时间转换为 UTC。

$date = new DateTime($dateVal);
$date->setTimezone(new DateTimeZone('UTC'));
$dtstart = $date->format('Ymd\THis\Z');

推荐阅读