1

我正在尝试将 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"
        }
4

2 回答 2

1

时间戳的+00:00一部分是您的时区的 GMT 偏移量,在这里,它设置为“加零”或人类,“我的时区是 GMT”。如果您比 GMT 时间差一小时,则需要将此部分更改为+01:00-01:00分别取决于您是比格林威治标准时间提前一小时还是比格林威治标准时间晚一小时。如果您愿意,您还可以在 PHP 中获取UTC 偏移量。

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

于 2013-04-02T14:23:42.390 回答
1

我希望有人会发现我的解决方案很有用。在我们切换到格林威治标准时间/从格林威治标准时间切换时,我在使用 Google 日历 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 属性。例如“欧洲/布拉格”。

最后我的代码如下所示:

$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"
于 2017-03-24T12:22:08.650 回答