2016-01-12 97 views
2

我有一个场景,我正在使用AngularJS来读取日期。有趣的是,它将我的日期值减1。Javascript新日期减少日期一天

这是怎么发生的?

new Date("2016-01-06T00:00:00") 
give me result as 
Tue Jan 05 2016 16:00:00 GMT-0800 (Pacific Standard Time) 
+4

非常简单...第一个日期字符串是UTC,你的时区偏移距离午夜8小时 – charlietfl

+1

正如上面所述,你需要调整你的时区 – AGE

+1

['Date.parse'](https:// developer .mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse) – Andreas

回答

3

这是因为当你在JavaScript中使用的new Date(),将其转换并打印在浏览器中时区的日期。

因此,如果您打印:

new Date("2016-01-06T00:00:00-0800") 

你会得到,因为你的时区(取决于浏览器)和UTC时间之间的差异-0800你想要的实际输出。

2

UTC时区来解释ISO 8601格式的论点,即不包含时区信息(注意,ECMAScript的2015年规定,如果没有一个时区的日期时间字符串为当地的对待,而不是UTC) 。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

由于您的日期字符串显得缺乏一个,JS假设是UTC时间。你看到的结果是相同的时刻,抵消你的时区。您所需要做的就是将时区数据提供给您正在解析的字符串。

2

这是因为日期正在考虑您的浏览器的时区帐户,在您的情况是在PST。它同样对我来说,在EST:

test = new Date("2016-01-06T00:00:00") 

星期二2016年1月5日19:00:00 GMT-0500(EST)

您仍然可以通过使用获得时间在UTC任何的.getUTC*功能,像这样:

test.getUTCDate();