3

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

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

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

结果t = NaN为什么?

4

3 回答 3

5

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

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

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

因此,将空格替换为 aT并附加 aZ或固定时区偏移量,然后再将其传递给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了 )或您指定的固定时区偏移的本地时间。

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

于 2012-08-19T22:25:59.007 回答
0

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

于 2012-08-19T22:34:06.100 回答
0

这很简单:

+(new Date("2012-08-20 01:16:00"));
于 2012-08-20T06:11:44.750 回答