2012-10-31 28 views
1

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

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

将输出这样的:

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

灿有人解释为什么发生这种情况

+3

什么是您的UTC偏移量? – SilentGhost

+0

GMT -4:30,我在委内瑞拉 – 8vius

+2

@ 8vius:好的,你去了。 – SilentGhost

回答

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" 
+0

这解决了这个问题,谢谢。 – 8vius

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) 

关键是要删除引号和手动设置的时间。另请注意,'月'为零,因此我从中减去一个

+0

我现在看到了这个问题,因为没有创建任何时间信息的日期只是将其作为GMT 0000并将其回滚到我的时区。 – 8vius

1

发生这种情况的原因是日期是根据您当地的时区转换为字符串

date变量实际上包含10月31日0:00 UTC。当您将其转换为字符串时,将使用您自己的时区进行转换,该时区位于UTC后面4:30小时。