更正Google日历事件的日期格式


Correct date formatting for a Google Calendar Event

我正试图为谷歌日历创建一个事件,但我收到了以下错误:

Invalid value for: "T" found, can only parse bare date string: 2013-08-22T16:00:00

我还尝试将时区偏移添加到字符串中,但我在EventDateTime对象中手动设置了时区,根据文档,这是不必要的。

以下是我如何创建时间字符串:

data['start'] = $("#inputDateStart").val() + "T" + $("#inputTimeStart").val();

以及我如何在我的对象中设置这个字符串

$start = new Google_EventDateTime();
$start->setTimeZone('America/Montreal');
$start->setDateTime($data['start']);
$event->setStart($start);

我错过了什么?当我只使用setDate函数设置日期时,全天事件都可以正常工作。

我不知道你的全部代码,但我在谷歌日历事件上设置日期时间时收到了同样的错误消息。当我使用谷歌在线api检查器时,我使用的日期/时间格式和时区运行得很好。最后,我发现问题是因为我做了这个(使用了类似于你的符号):

$start = new Google_EventDateTime();
$start->setDate('2013-10-10');
$event->setStart($start);

后来,在发现后,我有了可用的日期和时间数据:

$start->setTimeZone('Europe/London');
$start->setDateTime('2013-10-10T19:15:00');
$event->setStart($start);

这给了我你提到的错误信息。也许谷歌解析器认为这只是一天的事件,然后被额外的日期/时间数据弄糊涂了。当我第一次检查我是否同时有日期和时间数据时,问题就消失了:

$start = new Google_EventDateTime();
$start->setTimeZone('Europe/London');
$start->setDateTime('2013-10-10T19:15:00');
$event->setStart($start);

您可以简单地在时间末尾附加时区:

$start = new Google_EventDateTime();
$start->setDateTime('2011-06-03T10:00:00-07:00');
$event->setStart($start);

这是GMT-7

因此,在您的情况下,这将起作用:

$start = new Google_EventDateTime();
$start->setDateTime($data['start']."-4:00");
$event->setStart($start);

:)

尽管谷歌自己的文档是旧的和无效的,你可能喜欢使用他们的一些方法:https://developers.google.com/google-apps/calendar/v3/reference/events/insert