使用Javascript在safari中将日期值设置为NAN

时间:2016-06-08 11:34:17

标签: javascript jquery date safari

我在使用Javascript比较某些日期时遇到此问题。我只在Safari上收到此问题。它在Chrome上正常工作。我先解释一下我的代码。

var date='2016-05-21';
var to='2016-05-23';
var eventdate='2016-06-01 16:48:51';
function getMidnight(date) {
    return (new Date(new Date(date.replace(/-/g, "/")).getFullYear(), new Date(date.replace(/-/g, "/")).getMonth(), new Date(date.replace(/-/g, "/")).getDate())); 
}
from = getMidnight(date);
to = getMidnight(to).getTime() + (24 * 3600-1) * 1000;
var event1=getMidnight(new Date(eventdate) + 24 * 3600 * 1000).getTime();   var event2=(new Date(from)).getTime();
var event3=getMidnight(eventdate).getTime();
var event4=(new Date(to)).getTime();
console.log('events',event1,event2,event3,event4);

我正在尝试打印控制台消息。在Chrome控制台中,它显示如下所示。

events 1464719400000 1463769000000 1464719400000 1464028199000

但在Safari浏览器上,它显示不正确并打印如下所示。

events NAN 1463769000000 1464719400000 1464028199000

它在NAN中提供Safari。我希望它在SafariChrome中打印相同的内容。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

为了让您的问题更轻松,问题在于:

new Date('2016-06-01 16:48:51')

这项工作在Chrome中没问题但在safari中没有。关于ECMAScript 5 ISO-8601格式支持的mdn谈论说:

  

或者,日期/时间字符串可以是ISO 8601格式。例如,可以传递和解析“2011-10-10”(仅限日期)或“2011-10-10T14:48:00”(日期和时间)。   如果你包括T它有效:

new Date('2016-06-01T16:48:51')

您可以使用新日期('2014-02-18T15:00:48'.replace(/ \ s /,'T'))。

如果你处理了很多像这样的情况我会建议使用似乎很好地处理这种情况的时刻,有或没有T:从字符串解析。另外,使用momentjs可以更轻松地完成整个示例:

var minutes = moment().diff("2014-02-18 15:00:48", 'minutes');