【问题标题】:Conversion from milliseconds to Unix Timestamp from different times gives same result从不同时间从毫秒转换为 Unix 时间戳给出相同的结果
【发布时间】:2013-05-15 05:25:54
【问题描述】:

我有两个变量:

tempTimeRequests timeLastUpdateRequests

两者都以自纪元以​​来的毫秒数给出。

我正面临来自 js 的奇怪行为:

我得到的结果

alert(
    tempTimeRequests+"\n"+
    timeLastUpdateRequests+"\n"+
    Date(tempTimeRequests)+"\n"+
    Date(timeLastUpdateRequests)
)

1369063665000
1369063651000
Mon May 20 2013 17:27:51 GMT+0200 (CEST)
Mon May 20 2013 17:27:51 GMT+0200 (CEST)

如果第二个显然有 51 秒(给出正确的结果)但第一个有 65 秒(这将给出 05 秒),我怎么会有相同的秒值? 我真的被吓坏了。

【问题讨论】:

  • 这很奇怪。当我分别打印它们(每个都使用console.log)时,我得到了正确的值。当我将它们组合成一个console.log 调用时,它们显示相同的值(alert 显然相同)
  • 如果你使用new Date(,它似乎对我有用
  • 来自 MDN:“将其作为常规函数调用(即没有 newoperator)将返回一个字符串而不是 Date 对象;”。所以这似乎完全没问题。同样来自 ES5:es5.github.io/#x15.9.2

标签: javascript date timestamp epoch


【解决方案1】:

Date 构造函数作为函数调用会返回当前日期。

来自specification

15.9.2 作为函数调用的日期构造函数

当 Date 作为函数而不是构造函数调用时,它返回一个表示 当前时间 (UTC) 的字符串。

注意函数调用Date(…)等同于具有相同参数的对象创建表达式new Date(…)

这与使用 new Date 时不同,它可以满足您的期望。

【讨论】:

  • 很好的解释。谢谢,我在回答时尝试找到这个。
  • @Robbert 这不是我,而是语言规范 :) 正在积极努力使 ECMAScript 语言规范更具可读性和可访问性。 es5.github.com 还提供简单的导航和指向 MDN 等资源的链接。
  • @Benjamin Gruenbaum 非常感谢!
【解决方案2】:

这应该可以解决问题

alert(
  tempTimeRequests+"\n"+
  timeLastUpdateRequests+"\n"+
  new Date(tempTimeRequests)+"\n"+
  new Date(timeLastUpdateRequests) 
)

【讨论】:

  • 好的,但这并不能解释为什么单独调用Date() 会暴露这种行为。这是一个错误吗?
  • 我不知道为什么会这样,除了 Date 是一个对象并且要创建一个对象,你使用 new 关键字。您调用它的方式是将其用作函数,可能某些浏览器支持但其他浏览器不支持。
  • 我猜它会这样做,因为当 Javascript 运行时,它会评估 Date(time) 函数,首先将其分配给第一次,然后是第二次,然后在将字符串构造为 alert 时它得到Date 对象作为一个字符串,当时将被设置为第二次。
猜你喜欢
  • 2019-10-20
  • 1970-01-01
  • 2018-10-10
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多