jQuery/JSON日期处理
我在处理Google日历XML中的JSON日期时遇到问题。我提取了.startTime和.endTime&我使用jQuery将这些日期(+之间的所有日期)格式化为YYYY-MM-DD。然后我使用格式化的日期将背景色添加到我自己日历中匹配的唯一ID(#YYYY-MM-DD)的表格单元格中。它工作正常,但在某个时候,日期变得不匹配。我遵循的过程是:jQuery/JSON日期处理,jquery,json,date,datetime,getdate,Jquery,Json,Date,Datetime,Getdate,我在处理Google日历XML中的JSON日期时遇到问题。我提取了.startTime和.endTime&我使用jQuery将这些日期(+之间的所有日期)格式化为YYYY-MM-DD。然后我使用格式化的日期将背景色添加到我自己日历中匹配的唯一ID(#YYYY-MM-DD)的表格单元格中。它工作正常,但在某个时候,日期变得不匹配。我遵循的过程是: 在谷歌日历上输入事件。对于我的测试活动,我使用了第25-27次 2014年3月(全天活动已勾选) 提取的XML JSON数据:“gd$when”:[{
- 在谷歌日历上输入事件。对于我的测试活动,我使用了第25-27次 2014年3月(全天活动已勾选)
- 提取的XML JSON数据:
“gd$when”:[{“endTime”:“2014-03-28”, “开始时间”:“2014-03-25”
- 使用下面的jQuery将格式化日期分配给我自己的Cal ID(感谢@Ezequiel帮助我走到了这一步——我不擅长jQuery)
函数GCalEvents(){ var calendar_json_url=”https://www.google.com/calendar/feeds/my_email%40googlemail.com/public/full?orderby=starttime&sortorder=ascending&max-结果=60&futureevents=true&alt=json“ //获取JSON格式的即将发生的事件列表 getJSON(日历、json、url、函数(数据){ //解析并呈现每个事件 jQuery.each(data.feed.entry,function(i,item){ var formatInt=函数(i){ 如果(i<10)返回“0”+i; 返回i; }; 变量格式=函数(d){ var date=d.getDate(); 变量月份=d.getMonth()+1; var year=d.getFullYear(); 返回年份+“-”+formatInt(月)+“-”+formatInt(日期); }; var getDates=函数(开始、结束){ var当前=新日期(开始); var完成=新日期(结束); var结果=[]; 做{ current.setDate(current.getDate()+1); 结果.推送(格式(当前)); }而(电流<完成); 返回结果; }; //将背景应用于日期。 var start=item.gd$when[0].startTime; var theend=item.gd$when[0].endTime; var dates=getDates(start,theend).map(函数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正在正确生成
我非常感谢任何人能给予我的帮助。从您的“提取的XML JSON数据”中我可以看到只是结束日期发生了变化。这是我以前见过的。我相信这与您将事件设置为全天事件有关。然后在第二天午夜结束。这与它的表示方式(本例中为JSON)无关,而是与谷歌存储它的方式有关
如果你创建了一个“正常”事件(不是全天),你应该得到你期望的日期。谢谢你的帮助。将事件设置为“正常”会更正结束日期。你知道开始日期错误的原因吗?(对不起,如果我在OP中使用了错误的行话,JSON对我来说是一个新领域)。我没有尝试过,但它可能是
current.setDate(current.getDate()+1);
我在do
的主体中看到的。具体来说是+1
。
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');
});
});
}