使用ISO 8601日期字符串初始化javascript日期会生成日期值-1天

时间:2013-02-20 09:34:00

标签: javascript datetime iso

var date = new Date('2013-04-15');
console.log(date);

输出:

Sun Apr 14 2013 20:00:00 GMT-0400 (EDT)

哪一天是-1天,为什么Date有这种行为?

3 个答案:

答案 0 :(得分:2)

这两个时间戳代表同一时间:

Sun Apr 14 2013 20:00:00 GMT-0400 (EDT)
Mon Apr 15 2013 00:00:00 UTC

你是第一个,但期待第二个。日期构造函数似乎需要UTC时间。

如果你这样做:

var date = new Date('2013-04-15 EDT');
console.log(date);

然后你可能会得到预期的结果


修改: This behavior is bizarre。此代码适用于您的目的:

var date = new Date('Apr 15 2013');
console.log(date);

Mon Apr 15 2013 00:00:00 GMT+XYZ

答案 1 :(得分:1)

您需要指定时区以获取您正在寻找的输出。

此处的示例:Javascript date object always one day off?

答案 2 :(得分:0)

由于new Date()正在使用UTC时间,toString()会使用您当前的时区。

如果要打印UTC时间,则应使用

var date = new Date('2013-04-15');
console.log(date.toUTCString());