以下代码针对jQuery UI datepicker运行。根据JSON响应是否包含该日期的数据来突出显示日期。这在Chrome(32.0.1675.2 canary)中运行良好,但在Firefox中则不行。任何人都知道为什么会这样吗? FF中没有添加高亮类。
function( response ) {
MyApp.events = response;
//console.log(events[1]);
$("#my-event-calendar" ).datepicker({
beforeShowDay: function(date) {
var result = [true, '', null];
var matching = $.grep(MyApp.events, function(event) {
//console.log(new Date(event.Date).valueOf() );
dateToHighlight = new Date(event.Date).valueOf();
return dateToHighlight === date.valueOf();
});
if (matching.length) {
result = [true, 'highlight', null];
}
return result;
},
在Chrome中,console.log(new Date(event.Date).valueOf() );
呈现1380582000000
,但在Firefox中,这是-1775005200000
更新,JSON数据现在格式如下:
对象{日期:“2013-10-02T14:30:00 + 00:00”,标题:“事件标题”}
答案 0 :(得分:0)
正如Quantas人所说,让Date函数解析字符串并不是一个好主意。手动解析日期字符串要好得多。另外,请勿使用2位数年份。
在这种情况下,您似乎需要一个类似的功能:
// Expects date in format m/d/yy
// where all years are +2000
function parseEventDate(s) {
s = s.split(/\D/);
return new Date(+s[2]+2000, ++s[0], s[1]);
}
将日期字符串转换为日期对象。请注意,将根据客户端的系统设置创建日期对象。
您现在使用的是ISO8601格式,如2013-10-02T14:30:00 + 00:00。虽然这与ES5一致,但是Date.parse方法不支持使用25%的浏览器(取决于您认为的统计信息),因此最好的方法仍然是手动解析字符串。
以下假设日期和时间是UTC(这是ES5要求的):
// Expects date in format yyyy-mm-ddThh:mm:ssZ
// Assumes timezone offset is 0000
function parseEventDate(s) {
s = s.split(/\D/);
return new Date(Date.UTC(s[0], --s[1], s[2], s[3], s[4], s[5]));
}
如果您想要包含时区偏移量,则需要做更多工作,但不多。