为什么给定日期变为使用新Date()前一天?

时间:2016-02-04 15:56:57

标签: javascript date

给定日期为malloc。这假设是2016年2月4日。但是当我使用2016-02-04时,它返回new Date()而不是Wed Feb 03 2016 16:00:00 GMT-0800 (PST)

以下是我所做的一切:

Thu Feb 04...

为什么会发生这种情况,如何得到我想要的结果,即2月4日而不是前一天呢?

4 个答案:

答案 0 :(得分:5)

您使用的格式被解释为UTC日期,因此假定时间是西欧的午夜。那比你早8小时。

您可以通过将T00:00-0800添加到日期字符串来强制解释时区。您自己解析日期并使用数字年,月和日期参数构造Date实例可能会更加健壮。

答案 1 :(得分:3)



var dateArray = "2016-02-04".split("-");
var year = dateArray[0];
var month = parseInt(dateArray[1], 10) - 1;
var date = dateArray[2];
var _entryDate = new Date(year, month, date);
alert(_entryDate);




根据@RobG

的建议删除parseIntmonth的不必要的year
  

我不知道Pointy指向的是什么(如无知)。我从不   知道日期构造函数将根据格式回退到UTC   字符串传递。   这样,Date构造函数将始终使用本地时区构建Date。   无论如何,使用带有数字参数的Date构造函数总是很好。

答案 2 :(得分:2)

Javascript Date对象也包含时间。如果您创建一个没有时间组件的组件,则默认为午夜。

问题是,午夜在什么时区?如果要从字符串解析日期,则ECMAScript定义中未指定该日期;这取决于实施。但是大多数实现选择“通用时间” - 这意味着所代表的时刻属于伦敦西部和国际日期线以东的之前日。

如果您从数字创建日期而不是解析字符串,则将其指定为本地时间,而不是Javascript认为它所在的时区。例如,在US / Eastern(“EST”)中:

new Date('2016-02-04')
//=> Wed Feb 03 2016 19:00:00 GMT-0500 (EST)  - midnight UTC
new Date(2016,2,4)
//=> Fri Mar 04 2016 00:00:00 GMT-0500 (EST)  - midnight EST

您可以在字符串末尾添加显式时间和时区:

new Date('2016-02-04T00:00:00-05:00')

但你必须知道时区偏移量才能做到这一点。或者你可以手动解析字符串并使用数字构造函数,这可能是你最安全的选择。

答案 3 :(得分:1)

这是因为日期以UTC格式存储(和解析),但显示在您的本地时区。要显示正确的日期,您可以使用

new Date("2016-02-04").toISOString()