我有两个日期字符串 - 同月,日和时间,但不同年份(2017年,1970年).当我将它们转换为Date对象然后使用getDate()函数时,我会得到不同的一天.
var d1 = '1970-05-11T22:00:00.000Z';
var d2 = '2017-05-11T22:00:00.000Z';
console.log(new Date(d1), new Date(d1).getDate()); // day 11
console.log(new Date(d2), new Date(d2).getDate()); // day 12
Run Code Online (Sandbox Code Playgroud)
为什么会这样,我该如何控制这种行为?
您的个人资料表明您在捷克共和国. getDate返回本地时间的值.2017年,根据timeanddate.com,观察了Daylight Savings并于5月生效.但是,它也说在1970年期间:
1970年未观察到夏令时(DST)
布拉格全年观察中欧时间(CET).
DST在1970年没有使用.
您的UTC时间中的22:00足够接近午夜,getDate以便在您的时区返回第二天,因为它是2017年的第12个当地时间,但仍然是1970年的第11个时间.
您可以通过使用getUTCDate而不是两者来返回11 来解决此问题:
var d1 = '1970-05-11T22:00:00.000Z';
var d2 = '2017-05-11T22:00:00.000Z';
console.log(new Date(d1), new Date(d1).getUTCDate()); // day 11
console.log(new Date(d2), new Date(d2).getUTCDate()); // day 11Run Code Online (Sandbox Code Playgroud)