我从Google日历XML中处理JSON日期时遇到问题。我提取了.startTime和.endTime &我使用jQuery格式化这些日期(+所有日期之间)为YYYY-MM-DD。然后,我使用格式化的日期向我自己的日历中匹配的唯一ID(#YYYY-MM-DD)的表单元添加背景颜色。它的工作正常,但是在这个过程中,日期变得不匹配。我下面的流程是:jQuery/JSON日期处理
- 在谷歌日历Enter事件。对于我的测试活动,我使用了25日 - 27日 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'); }); }); }
检查日历,并有彩色26日,27日,28日三月的背景 - 所以最终的效果是,它已经改变了我的整个原克卡事件向前一天,相对于JSON有正确的结束日期,但错误的开始日期!显然,我只是想要显示正确的GCal日期。
事情我已经尝试:
var date = d.getDate() -1 ;
- 但是,这会导致该月的最后一天的问题。- 有没有其他的jQuery功能干扰。
- 我自己的日历表格单元ID正在生成。
它是否与时区有关?
我会很感激任何人可以给的帮助。
感谢您的帮助。将事件设置为“正常”会纠正结束日期。你有什么想法,为什么开始日期是错误的? (对不起,如果我在OP中使用了错误的术语,JSON对我来说是一个新领域)。 – theflyingant
我没有尝试过,但它可能是'current.setDate(current.getDate()+ 1);'我看到'do'的主体。特别是'+ 1'。 – fredrik