【发布时间】:2014-04-06 19:24:56
【问题描述】:
我有一个 Ajax 调用来从公共 Google 日历中检索信息:
$.ajax({
url: "https://www.google.com/calendar/feeds/{CalID}/public/full?start-min={StartTime}&start-max={endTime}&alt=json-in-script&callback=?";
dataType: 'json',
timeout: 3000,
success: function( data ) { ProcessData(data);},
});
在函数ProcessData(data)内我有以下语句:
StartTime = new Date(data.feed.entry[i].gd$when[j].startTime);
在StartTime 中存储一个Date() 对象,其中包含特定事件的开始日期。 Google 通常使用 ISO 8601 时间格式:YYYY-MM-DDThh:mmTZD(例如 1997-07-16T19:20+01:00),这很好用。但是,对于“全天”事件,格式仅采用以下形式:YYYY-MM-DD(例如 1997-07-16)(W3 http://www.w3.org/TR/NOTE-datetime 允许),在这种情况下 new Date() 会将其解释为格林威治标准时间。也就是说,即使事件已经在您当地的时区创建,也会将该特定日期更正为您当地的时区。在我的特殊情况下,当检索一个“全天”事件时,比如说,2014 年 4 月 7 日发生在我的时区,会返回一个字符串,就好像它早于 5 小时一样
new Date("2014-04-07")
返回 2014 年 4 月 6 日星期日 19:00:00 GMT-0500 (CDT),关闭 5 小时。 (有关日期解析的更多详细信息,请参阅以下question)
您在使用 Google 日历时是否曾遇到过这个问题?如果是这样,你是如何解决的?我应该使用不同的方法而不是实际考虑时区的 new Date() 吗?
Google 的 JSON 响应包含一个参数 feed.timezone,其中包含 Olson 的时区 ID,但我需要一种方法将(希望是另一个 Ajax 调用或类似的)该 ID 转换为实际偏移量。我在这个论坛中找到了以下question,但问题在于这个 API 需要的参数是实际城市而不是时区 ID,这让我以某种方式将时区 ID 转换为要传递到的城市URL 字符串。
任何帮助将不胜感激!
【问题讨论】:
标签: javascript date datetime google-calendar-api