【问题标题】:Convert DateTime string to timestap in javascript在javascript中将日期时间字符串转换为时间戳
【发布时间】:2012-08-15 08:37:26
【问题描述】:

如果dd = "2012-08-20 01:16:00"; 将此日期转换为时间戳(如下代码所示)

var t = new Date(dd).getTime();

http://jsfiddle.net/userdude/DHxwR/

结果t = NaN为什么?

【问题讨论】:

标签: javascript date time timestamp


【解决方案1】:

根据ECMA-262(§15.9.1.15,日期时间字符串格式,第 169 页),唯一需要接受的日期字符串格式是:

[+YY]YYYY[-MM[-DD]][THH:mm[:ss[.sss]]]Z

其中ZZ(对于UTC)或由+- 后跟HH:mm 组成的偏移量。不应依赖特定浏览器碰巧支持的任何其他格式,因为不能保证继续支持。

因此,将空格替换为 T 并附加 Z 或固定时区偏移,然后再将其传递给 Date 构造函数。例如,如果日期和时间在 UTC+8 时区:

var dd = "2012-08-20 01:16:00";
var t = new Date(dd.replace(' ', 'T') + '+08:00').getTime();

这将返回从 1970 年 1 月 1 日午夜 UTC 到您指定的日期的毫秒数,被视为通用时间(如果您附加了 Z)或固定时区偏移的本地时间你指定。

请注意,这会有所不同,因为日期不会像您的问题示例那样简单地视为用户系统时区的本地时间。但是,我想不出这样做会有用的情况,因为根据用户的配置,您会得到不同的结果——但实际上,无论您身在何处,两个日期之间的时间差总是相同的。

【讨论】:

  • 适用于 Firefox:jsfiddle.net/userdude/DHxwR/1、Chrome、Opera 和 IE9(但不适用于 IE7/8 浏览器模式)。
  • 这似乎在比 OP 所展示的更多的浏览器中工作,但 IE7/8 却没有(Date.getTime() 不支持吗?)。
  • 我已经用更符合标准的解决方案更新了我的答案,以及一些关于时区的重要讨论。
【解决方案2】:

尝试在年、月和日值之间使用空格或逗号。

【讨论】:

    【解决方案3】:

    很简单:

    +(new Date("2012-08-20 01:16:00"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 2011-03-16
      • 2016-09-15
      相关资源
      最近更新 更多