首页 > 解决方案 > Google Calendar API 时区日光和标准时间问题

问题描述

当我创建一个给它一个近期日期的事件时,一切都很好。

但是当我在几个月后创建一个事件时,假设它在夏令时 DST 之外(而我目前处于夏令时),该事件是用不需要的 1 小时偏移量创建的。

下面的代码产生以下输出:

Starts 2020-12-20 9:00 Ends 2020-12-20 11:00

 $event = array(
        'summary' => $attributes['summary'],
        'location' => $attributes['location'],
        'description' => $attributes['description'],
        'start' => array(
            'dateTime' => 2020-12-20T10:10:00-04:00',
            'timeZone' => 'America/Toronto',
        ),
        'end' => array(
            'dateTime' => 2020-12-20T10:12:00-04:00',
            'timeZone' => 'America/Toronto',
        ),
        'anyoneCanAddSelf'=>true,
        'guestsCanInviteOthers'=>true,
    );

问题

我应该如何更改我的代码以便它自动工作,这样我就不需要每年手动更改我的代码/偏移量两次?

标签: phpgoogle-apigoogle-calendar-apigoogle-api-php-client

解决方案


问题是您过度指定dateTime参数以包含偏移量,但您也提供了一个timeZone参数。在这种情况下,timeZone参数与偏移量值冲突dateTime(美国/多伦多在该日期是偏移量 -05:00)。

鉴于两者之间的冲突 - 它选择使用dateTime.

事件资源的文档在end.dateTime属性中指定:

时间,作为组合的日期时间值(根据 RFC3339 格式化)。除非在 timeZone 中明确指定时区,否则需要时区偏移量。

(重点补充)

解决问题的最简单方法是从dateTime您指定的偏移值中删除并依赖timeZone设置。


推荐阅读