【问题标题】:Javascript on Firefox gives 'Invalid Date'Firefox 上的 Javascript 给出“无效日期”
【发布时间】:2016-10-18 05:55:09
【问题描述】:

我没有询问用户他们喜欢的时区,而是让服务器提供 UTC 时间和一个小的 Javascript,它可以在浏览器端将其转换为本地时间。以下片段适用于 Chrome,但不适用于 Firefox。为什么?

在任何合理的浏览器中,有没有一种通用的方法可以将 UTC 时间转换为本地时间?

var timestamp_utc="2016-06-16 15:43:40.086670";
                    n = timestamp_utc.indexOf('.');
                    document.write((new Date(Date.parse(timestamp_utc.substring(0, n != -1 ? n : s.length)+" UTC"))).toLocaleString());

【问题讨论】:

    标签: javascript google-chrome firefox timezone frontend


    【解决方案1】:

    是的,把它放在the specification's date/time format。在您的情况下,您可以通过将空格更改为 T 并在末尾添加 Z 来做到这一点:

    var dt = new Date(timestamp_utc.replace(" ", "T") + "Z");
    

    除非您愿意,否则无需删除小数部分。如果您愿意,并且您确定它就在那里,那么:

    var dt = new Date(timestamp_utc.split(".")[0].replace(" ", "T") + "Z");
    

    例子:

    var timestamp_utc = "2016-06-16 15:43:40.086670";
    console.log(new Date(timestamp_utc.replace(" ", "T") + "Z"));
    console.log(new Date(timestamp_utc.split(".")[0].replace(" ", "T") + "Z"));

    注意:Date.parse(String)new Date(String) 使用相同的解析算法,所以永远不需要做new Date(Date.parse(x))

    【讨论】:

    • 非常感谢。顺便说一句,是否有一个简单的库可以输出最近日期的“2 分钟前”之类的内容?
    • @Castle:我似乎记得一个叫做“timeago”或类似的东西。在 MSO 或 MSE 的某个地方,我相信他们会在这里说他们使用什么库。
    • @Castle - 查看moment.js。它可以处理您所有的解析和格式化需求,包括“2 分钟前”。
    • @MattJohnson:哇,我怎么会错过那个时刻does human duration formatting?!
    • 是的。有几个不同的功能。最常用的是.fromNow()
    猜你喜欢
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2014-01-12
    • 2015-02-04
    • 2012-10-01
    • 2012-11-02
    • 1970-01-01
    • 2016-07-05
    相关资源
    最近更新 更多