日期在Chrome和Firefox中不一致

时间:2013-10-21 12:39:11

标签: javascript date jquery-ui-datepicker

以下代码针对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”,标题:“事件标题”}

1 个答案:

答案 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]));
}

如果您想要包含时区偏移量,则需要做更多工作,但不多。