【发布时间】:2014-01-31 09:16:07
【问题描述】:
我在处理来自 Google 日历 XML 的 JSON 日期时遇到问题。我已经提取了 .startTime 和 .endTime 并且我使用 jQuery 将这些日期(+ 之间的所有日期)格式化为 YYYY-MM-DD。然后,我使用格式化的日期将背景颜色添加到我自己日历中匹配的唯一 ID (#YYYY-MM-DD) 的表格单元格中。它工作正常,但在某个地方日期变得不匹配。我正在关注的过程是:
- 在 Google 日历上输入活动。对于我的测试活动,我使用了 25th-27th 2014 年 3 月(全天活动已打勾)。
- 提取的 XML JSON 数据:
"gd$when": [{"endTime": "2014-03-28", "startTime": "2014-03-25"
(所以我已经很困惑了,因为 JSON 在我的活动结束日期中增加了一天 - 为什么?)
-
使用下面的 jQuery 将格式化日期分配给我自己 Cal 的 ID。 (感谢@Ezequiel,他帮助我走到了这一步——我不擅长 jQuery)。
function GCalEvents() { var calendar_json_url = "https://www.google.com/calendar/feeds/my_email%40googlemail.com/public/full?orderby=starttime&sortorder=ascending&max-results=60&futureevents=true&alt=json" // Get list of upcoming events formatted in JSON jQuery.getJSON(calendar_json_url, function(data){ // Parse and render each event jQuery.each(data.feed.entry, function(i, item){ var formatInt = function (i) { if (i < 10) return "0" + i; return i; }; var format = function (d) { var date = d.getDate(); var month = d.getMonth() + 1; var year = d.getFullYear(); return year + "-" + formatInt(month) + "-" + formatInt(date); }; var getDates = function (start, theend) { var current = new Date(start); var finish = new Date(theend); var result = []; do { current.setDate(current.getDate() + 1); result.push(format(current)); } while (current < finish); return result; }; // Apply background to dates. var start = item.gd$when[0].startTime; var theend = item.gd$when[0].endTime; var dates = getDates(start, theend).map(function toId(date) { return "#" + date }).join(","); jQuery(dates).removeClass('date-cell').addClass('date-selected'); }); }); } 检查日历,它已经为 3 月 26 日、27 日、28 日 的背景着色 - 所以最终效果是将我的整个原始 GCal 事件向前移动了一天,并且就 JSON 而言,它的结束日期正确,但开始日期错误!显然我只想显示正确的 GCal 日期。
我尝试过的事情:
-
var date = d.getDate() -1 ;- 但这会导致当月最后一天出现问题。- 没有其他 jQuery 函数干扰。
- 我自己的日历的表格单元格 ID 生成正确。
与时区有关吗?
如果有人能提供任何帮助,我将不胜感激。
【问题讨论】:
标签: jquery json date datetime getdate