【问题标题】:Google calendar API daylight savings time issues (time zones)Google 日历 API 夏令时问题(时区)
【发布时间】:2017-06-18 02:38:56
【问题描述】:

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

【问题讨论】:

  • 如果您在传递的时间戳值中使用您的 实际 时区,它应该会自动正常工作。
  • 是在您将调用发送到 API 之前添加的额外小时,还是在您发送时间戳比记录的时间戳少一小时的调用后显示?此外,您可以提供的任何代码/php 日期时间设置都会有所帮助。
  • 我已经添加了我正在使用的json代码。
  • 我也有这个问题。我在 GMT 时区,如果我使用 API 创建 15:00 的事件,它将被创建为 16:00。发送日期为2013-09-12T15:00:00+00:00。还尝试使用date_default_timezone_set("GMT") 以防万一。你有没有得到这个工作?

标签: php timezone google-calendar-api


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我希望有人会发现我的解决方案很有用。在我们切换到格林威治标准时间/从格林威治标准时间切换时,我在使用 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"
    

    【讨论】:

      猜你喜欢
      • 2018-08-27
      • 2018-08-19
      • 2012-09-06
      • 2012-03-25
      • 1970-01-01
      • 2021-09-25
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多