以31作为日期创建日期,输出为30

时间:2012-10-31 13:38:58

标签: javascript date

我正在使用格式为'yyyy-MM-dd'的字符串创建日期,但由于某种原因,它们总是在前一天创建。如果我将日期设置为'2012-10-31',则Date对象实际上是10月30日而不是31.例如,这个:

var d1=new Date('2012-10-31');

将输出:

Tue Oct 30 2012 19:30:00 GMT-0430 (Venezuela Standard Time)

有人可以解释为什么会这样吗?

3 个答案:

答案 0 :(得分:1)

试试这个

var d1=new Date(2012, 10-1, 31, 0, 0 ,0);
document.write(d1);

产生

Wed Oct 31 2012 00:00:00 GMT-0400 (Eastern Daylight Time) 

关键是删除引号并手动设置时间。另请注意,'month'为零,因此为了便于阅读,我从中减去一个

答案 1 :(得分:1)

这是因为日期根据您的本地时区转换为字符串

日期变量实际上包含10月31日0:00 UTC。当您将其转换为字符串时,它将使用您自己的时区进行转换,该时区比UTC晚4:30。

答案 2 :(得分:1)

如果没有其他参数,Date()会使用GMT + 0000创建您的时间戳。

将您的日期转换为字符串,没有其他参数,它将使用本地化的表示法 如果要创建与时区匹配的日期,请执行以下操作:

var d1=new Date('2012-10-31 GMT-0430');
//That's what you should get
//"Wed Oct 31 2012 00:00:00 GMT-0430"

现在使用此日期,如果在具有不同时区的浏览器中执行d1.toString(),则可以将本地时间转换为其他时区的时间:

d1.toString();
//That's what I get
//"Wed Oct 31 2012 05:30:00 GMT+0100"