【问题标题】:JavaScript Date.parse return NaN in Mozilla BrowserJavaScript Date.parse 在 Mozilla 浏览器中返回 NaN
【发布时间】:2016-02-03 14:08:59
【问题描述】:

Mozilla 浏览器我尝试在 JavaScript 中获取时间戳,例如 php 中的 strtotime

我的代码:

//var start_date = data.result[0].start_date;
var start_date = "2011-01-26 13:51:50";
var d = Date.parse(start_date) / 1000;
console.log(d);
// 1296030110

以上代码在 chrome 中运行良好。但不适用于 Mozilla 浏览器。我得到了NaN 的价值。请帮帮我。

在谷歌搜索后,我找到了一种在日期和时间之间添加T 的解决方案。所以我添加了。我得到了输出,但两个浏览器的输出不一样。

var start_date = "2011-01-26T13:51:50";
var d = Date.parse(start_date) / 1000;
console.log(d);
//Mozilla = 1296030110
//Chrome  =  1296044910

【问题讨论】:

  • 还在时间后面加上一个时区指示符,那么它将始终如一地工作
  • 必须再说一遍:不要用 Date 构造函数解析字符串。 OP 中的格式不是 ECMAScript 2015 识别的格式(无论如何,所有使用的浏览器都不支持),因此如何处理它完全取决于实现(包括作为无效日期)。始终手动解析字符串,要么编写自己的两行函数,要么使用库。

标签: javascript datetime


【解决方案1】:

不要使用 Date 构造函数或 Date.parse 解析字符串(它们做同样的事情),这是非常不可靠的,尤其是对于非标准字符串(以及一些非标准字符串)。要将“2011-01-26 13:51:50”解析为当地时间,请使用库或简单函数,例如:

function parseDateTime(s) {
  var b = s.split(/\D/);
  return new Date(b[0],b[1]-1,b[2],b[3],b[4],b[5])
}

document.write(parseDateTime("2011-01-26 13:51:50") / 1000);

为了包含验证,对缺失值的支持会在一行中添加更多代码。

【讨论】:

    【解决方案2】:
    var start_date = "2011-01-26 13:51:50";
    var d = Date.now(start_date);
    console.log(d);
    

    它将在 mozila 中运行 您无需执行任何计算 它会自动转换为毫秒。

    【讨论】:

      【解决方案3】:

      试试这个。我不确定这个结果是否完美。

      var start_date = Date("2011-01-26 13:51:50");
      var d = Date.parse(start_date) / 1000;
      console.log(d);
      //1454478429
      

      【讨论】:

        【解决方案4】:

        在所有浏览器上试试它的工作

        start_date="2011-01-26 13:51:50".replace(" ","T");
        start_date = new Date(start_date);
        var d = start_date.getTime() / 1000;
        

        【讨论】:

        • 在 Mozilla 浏览器中不工作。你试过 Mozilla 吗?
        • 您希望如何解析它? ISO 8601 表示将其视为本地,但 ECMASCript 2015 将被解释为将其视为 UTC。
        【解决方案5】:

        这会起作用

            var start_date = "Jan 26,2011 13:51:50 ";
            var d = Date.parse(start_date)/1000;
            console.log(d);
        

        因为

        Date.parse() 方法解析日期的字符串表示形式,如果字符串无法识别或包含非法日期值 (e.g. 2015-02-31),则返回自 January 1, 1970, 00:00:00 UTC or NaN 以来的毫秒数。

        parse() 方法接受一个日期字符串(such as "Dec 25, 1995") 并返回自January 1, 1970, 00:00:00 UTC. 以来的毫秒数

        【讨论】:

        • ECMAScript 2015 允许实现以任何他们想要的方式处理不符合 ISO 8601 的字符串(包括无效日期)。它还偏离了 ISO 8601 在如何处理只有日期的表单方面,所以仅仅因为您测试的少数实现按您的预期解析字符串并不意味着它们都会。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-27
        • 1970-01-01
        • 2022-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-15
        相关资源
        最近更新 更多