【问题标题】:start date and end date both are off by 1 day in Google CalendarGoogle 日历中的开始日期和结束日期都相差 1 天
【发布时间】:2019-10-20 10:36:17
【问题描述】:

我有一些 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 日的预期值

有什么想法可以调试这个吗?

【问题讨论】:

  • 可能是时区问题。
  • 如果不使用 GMT 会认为您需要时间戳。但我确定某处是 5:00... 添加一些时间方面,这样您就可以看到您有多少小时了。
  • @ficuscr 如果日期字符串没有时间部分,strtotime 是否假定为 00:00:00?
  • 假设是这样。将其关闭可能只是意味着在解析和渲染 ical 时看不到它。建议一个明确的时间,比如 18:00,并且更容易发现日期时间如何转移到任何偏移量。
  • 我明白你的意思。我只是在想,20190801T000000Z 是 Z 中的日期和时间。如果您不在 Z 中,日历会将日期/时间调整到您的时区,对吧?

标签: php date icalendar


【解决方案1】:

我认为正在发生的事情是这样的:

您的活动应该在您所在时区的 2019 年 8 月 1 日举行,根据明显的偏移量似乎是 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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多