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

时间:2013-04-02 14:07:40

标签: php timezone google-calendar-api

我正在尝试将Google日历集成到我的某个应用中。

我一直在关注一个有用的教程,但一直坚持告诉Google正确的时间。

当我添加约会时,我使用此时间戳格式。

日期时间时区 2013-04-02T18:00:00.000 + 00:00

现在这似乎有效,我可以看到它为当前的夏令时增加了一个小时。我如何过来或使用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"
        }

2 个答案:

答案 0 :(得分:1)

时间戳的+00:00部分是您的时区的GMT偏移量,此处,它设置为“加零”或在人类中,“我的时区是GMT”。如果您距离GMT一小时,则需要将此部分更改为+01:00-01:00,具体取决于您是分别提前一小时还是一小时后。如果您愿意,也可以获得UTC Offset in PHP

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

答案 1 :(得分:0)

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

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

对我来说,只有解决方案是停止使用带有时间偏移的RFC3339格式。现在我使用以下(RFC3339之类)DateTime格式:Y-m-d\TH:i:s(注意最后缺少的P属性,RFC3339:Y-m-d\TH: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-d\TH:i:s");
$atts['start']['timeZone'] = $this->timeZone; //"Europe/Prague"
$atts['end']['dateTime'] = $this->end->format("Y-m-d\TH:i:s");
$atts['end']['timeZone'] = $this->timeZone; //"Europe/Prague"
相关问题