Google日历API夏令时问题(时区)



我正在尝试将谷歌日历集成到我的一个应用程序中。

我一直在遵循一个有用的教程,但一直在告诉谷歌正确的时间。

当我添加一个约会时,我使用这个时间戳格式。

Date Time时区2013 - 04 - 02 - t18:00:00.000 + 0

现在这似乎工作,除了我可以看到它增加了一个小时的当前夏令时。如何使用PHP生成正确的日期格式呢?

任何帮助或链接的指南,我可以阅读将是伟大的,所有我能找到的是关于人们有反复出现的日期时间的问题。

这是我的json代码添加和约会,

$date = '2013-04-02';
        $starttime = '18:00';
        $endtime = '20:00';
{
         "start": {
          "dateTime": "{$date}T{$starttime}:00.000+00:00"
         },
         "end": {
          "dateTime": "{$date}T{$endtime}:00.000+00:00"
         },
         "summary": "$title",
         "description": "$title"
        }

时间戳的+00:00部分是您的时区的GMT偏移量,在这里,它被设置为" + 0 "或在人类中,"我的时区是GMT。"如果您离格林尼治时间差了一小时,您需要将这部分更改为+01:00-01:00,这取决于您是比格林尼治时间早一小时还是晚一小时。如果你愿意,你也可以在PHP中获得UTC偏移量。

或者,您可以将所有内容转换为GMT日期/时间,但这要做更多的工作,并且内置时区支持,使用它更容易。

我希望有人会发现我的解决方案有用。当我们从GMT切换到/时,我使用Google Calendar API插入事件时遇到了问题。

我正在使用DateTime和它的常量RFC3339。RFC3339格式包括时间偏移(如+01:00)。这可能会导致Google Calendar API出现问题,因为一旦指定了dateTime属性,Calendar就会完全忽略timeZone属性中的值。

对我来说,唯一的解决方案是停止使用带有时间偏移的RFC3339格式。现在我使用以下(RFC3339类似)日期时间格式:Y-m-dTH:i:s(注意末尾缺少P属性,RFC3339: Y-m-dTH:i:sP)。

那么您必须指定timeZone属性。例如"Europe/Prague"。

最后我的代码看起来像这样:

$atts['summary'] = $this->title;
$atts['location'] = $this->location;
$atts['description'] = $this->description;
$atts['start']['dateTime'] = $this->start->format("Y-m-dTH:i:s");
$atts['start']['timeZone'] = $this->timeZone; //"Europe/Prague"
$atts['end']['dateTime'] = $this->end->format("Y-m-dTH:i:s");
$atts['end']['timeZone'] = $this->timeZone; //"Europe/Prague"

最新更新