【问题标题】:new Date(milliseconds) returns Invalid date新日期(毫秒)返回无效日期
【发布时间】:2013-06-28 18:26:05
【问题描述】:

我正在尝试使用 javascript 将毫秒转换为日期:

new Date(Milliseconds); 

构造函数,但是当我给它一个毫秒值说 1372439683000 它返回无效日期。如果我转到site that converts milliseconds to date,它会返回正确的日期。

有什么想法吗?

【问题讨论】:

  • alert(new Date(1372439683000)); 为我工作。 “无效日期”到底是什么意思,你得到什么结果?
  • @Pekka웃 OP 正在获取一个字符串化为“Invalid Date”的Date 对象。 (例如,试试alert(new Date(""))

标签: javascript date time milliseconds


【解决方案1】:

你使用的不是数字,而是一个看起来像数字的字符串。根据 MDN,当您将字符串传递给 Date 时,它期望

解析方法识别的格式(符合 IETF 的 RFC 2822 时间戳)。

这种字符串的一个例子是“December 17, 1995 03:24:00”,但您传入的字符串看起来像“1372439683000”,无法解析。

使用parseInt 或一元+Milliseconds 转换为数字:

new Date(+Milliseconds); 
new Date(parseInt(Milliseconds,10)); 

【讨论】:

  • new Date(929397621000) 在开发人员工具中返回格式有效的日期字符串 Mon Jun 14 1999 15:00:21 GMT-0700 (PDT) 但是当我尝试检查对象时,它显示“无效日期”。而且在使用它的实际代码中,它也会创建一个无效的日期。
  • @Michael 这似乎与此处描述的问题不同。你在做console.dir(new Date(929397621000))吗?如果是这样,在该实例中看到__proto__: Invalid Date 是正确的(或至少不足为奇的)行为。 Date prototype is 日期无效;有效的日期信息存在于Dateinstances 上,而不是原型上。
  • 我在 Chrome 的开发者工具中直接输入表达式作为手表。我的代码基本上是在做同样的事情。因为我调用new 应该会产生一个有效的 Date 对象,是吗?奇怪的是,即使new Date() 正在产生一个无效的日期(调试器可以奇怪地正确地字符串化),我无法检查它的元素(因为它只显示“无效日期”)所以这可能是一个驾驶舱问题。
  • 好吧,看来问题只出现在检查器中……实际对象是有效的,即使检查对象显示它是无效的。
  • @Michael 您的问题似乎很微妙,值得发布新的问题帖子(或错误报告?)
【解决方案2】:

Date 函数区分大小写:

new Date(Milliseconds); 

【讨论】:

    【解决方案3】:

    而不是这个

    new date(Milliseconds); 
    

    使用这个

    new Date(Milliseconds); 
    

    你的陈述会给你日期未定义错误

    【讨论】:

      【解决方案4】:

      由于其他原因,我收到此错误。

      我从 redis 中读取了一个值为 json 的键。

      client.get(someid, function(error, somevalue){});

      现在我试图访问somevalue(这是一个字符串)中的字段,例如somevalue.start_time,而不解析为 JSON 对象。 这将返回“未定义”,如果将其传递给 Date 构造函数,new Date(somevalue.start_time) 将返回“无效日期”。

      所以首先使用JSON.parse(somevalue) 获取JSON 对象,然后再访问json 中的字段解决了这个问题。

      【讨论】:

        【解决方案5】:

        请务必注意,时间戳参数必须是数字,不能是字符串。

        new Date(1631793000000).toLocaleString('en-GB', { timeZone: 'America/Argentina/Buenos_Aires' });
        
        // Returns: '16/09/2021, 08:50:00'
        
        new Date("1631793000000").toLocaleString('en-GB', { timeZone: 'America/Argentina/Buenos_Aires' });
        
        // Returns: 'Invalid Date'
        

        如果您收到的时间戳是字符串,您可以简单地将其包裹在 parseInt() 周围:parseInt(your_ts_string)

        【讨论】:

          猜你喜欢
          • 2014-10-12
          • 1970-01-01
          • 2021-06-30
          • 2017-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-22
          相关资源
          最近更新 更多