我使用格式为'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)
灿有人解释为什么发生这种情况
我使用格式为'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)
灿有人解释为什么发生这种情况
没有更多参数,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"
这解决了这个问题,谢谢。 – 8vius
尝试此
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)
关键是要删除引号和手动设置的时间。另请注意,'月'为零,因此我从中减去一个
我现在看到了这个问题,因为没有创建任何时间信息的日期只是将其作为GMT 0000并将其回滚到我的时区。 – 8vius
发生这种情况的原因是日期是根据您当地的时区转换为字符串。
date变量实际上包含10月31日0:00 UTC。当您将其转换为字符串时,将使用您自己的时区进行转换,该时区位于UTC后面4:30小时。
什么是您的UTC偏移量? – SilentGhost
GMT -4:30,我在委内瑞拉 – 8vius
@ 8vius:好的,你去了。 – SilentGhost