![](/img/trans.png)
[英]javascript format Date obj to yyyy-MM-dd hh:mm:ss returns NAN-NAN-NAN
[英]Safari Javascript Date() NaN Issue (yyyy-MM-dd HH:mm:ss)
我的代码在 Google Chrome 中运行正常,但在 Safari 中运行不正常。
我发现我需要将yyyy-MM-dd HH:mm:ss
转换为ISO 8601
,但我没有找到解决方案。
在线测试链接: http://jsfiddle.net/UVgHR/
Javascript:
$(document).ready(function() {
calculateMinutes();
setInterval(calculateMinutes, 60000);
});
function calculateMinutes() {
$('.calculateMinutes').each(function () {
var diff = Math.abs(new Date( $(this).data('timestamp') ) - new Date());
var minutes = Math.floor((diff/1000)/60);
$(this).html( minutes + ' min.' );
});
}
HTML 示例:
<span class="calculateMinutes" data-timestamp="2014-02-18 15:00:48">
为了使您的问题更容易,您的问题在于:
new Date('2014-02-18 15:00:48')
这项工作在 chrome 中可以,但在 safari 中不行。 mdn 谈论ECMAScript 5 ISO-8601 格式支持说:
或者,日期/时间字符串可以是 ISO 8601 格式。 例如,可以传递和解析“2011-10-10”(只是日期)或“2011-10-10T14:48:00”(日期和时间)。
如果你包括T
它有效:
new Date('2014-02-18T15:00:48')
您可以使用new Date('2014-02-18T15:00:48'.replace(/\s/, 'T'))
。
如果您处理很多这样的情况,我会建议使用moment似乎可以很好地处理这种情况,无论是否有 T: parsing from string 。 此外,使用 momentjs,您的整个示例更容易:
var minutes = moment().diff("2014-02-18 15:00:48", 'minutes');
我认为何塞在这里错过了一点 - 不要忘记包括 Z 否则时区会滞后。
新日期('2014-02-18T15:00:48')新日期('2014-02-18T15:00:48Z')
您可以使用new Date('2014-02-18T15:00:48'.replace(/\s/, 'T')+'Z').
请参阅此以获取更多信息 - new Date() 在 Chrome 和 Firefox 中的工作方式不同
我以前见过这样的问题,对我有用的是用T
替换 Date 和 Time 之间的空格。 尝试这个:
更新的 JavaScript:
function calculateMinutes() {
$('.calculateMinutes').each(function () {
var timestamp = $(this).data('timestamp').replace(' ', 'T');
var diff = Math.abs(new Date(timestamp) - new Date());
var minutes = Math.floor((diff / 1000) / 60);
$(this).html(minutes + ' min.');
});
}
如果用斜杠替换破折号,它在 Safari 中有效:
dateTimeString.replace(/-/g, '/')
修改这段代码
new Date('2014-02-18 15:00:48')
至
new Date('2014-02-18 15:00:48'.replace(" ", "T"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.