1

我正在从格式为“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)

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

4

3 回答 3

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) 

关键是去掉引号并手动设置时间。另请注意,“月”是从零开始的,因此为了便于阅读,我从中减去了一个

于 2012-10-31T13:45:40.637 回答
1

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

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

于 2012-10-31T13:48:38.733 回答
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"
于 2012-10-31T13:49:34.807 回答