繁体   English   中英

Safari Javascript Date() NaN 问题 (yyyy-MM-dd HH:mm:ss)

[英]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.');
    });
}

JSFiddle 在这里

如果用斜杠替换破折号,它在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM