当我运行这两行时:
date_obj = new Date('2018-08-23');
date_obj.setHours('19');
我得到的输出是:
2018-08-23T00:00:00.000Z
然后:
2018-08-22T23:00:00.000Z
我了解到它已在第二个时间更改为UTC时间,因此该小时为23,而不是设置为19。所以我的问题是,为什么要将它更改为前一天?如何阻止这种情况发生?
答案 0 :(得分:0)
这给您您想要的东西:
new Date(new Date('2018-08-23').setHours(19))
这是我控制台中的各种输出:
new Date('2018-08-23')
2018年8月23日星期四01:00:00 GMT + 0100(英国夏令时)
new Date('2018-08-23').setHours('19')
1535047200000
new Date('2018-08-23').setHours(19)
1535047200000
new Date(new Date('2018-08-23').setHours(19))
2018年8月23日星期四19:00:00 GMT + 0100(英国夏令时)
似乎setHours返回的是时间戳而不是日期,因此您需要根据时间戳创建一个新的日期。
或者,使用moment.js库,使用它更容易。
答案 1 :(得分:0)
使用字符串参数调用Date constructor会创建一个UTC日期。如果您位于GMT-0400(东部),则致电new Date('2018-08-23')
会导致:
Eastern: 2018-08-22 20:00:00
GMT: 2018-08-23 00:00:00
致电Date.setHours(19)
时,您会设置小时数according to local time,结果是:
Eastern: 2018-08-22 19:00:00
GMT: 2018-08-22 23:00:00
您可以使用Date constructor创建一个接受多个参数的本地时间日期:
let date = new Date(2018, 7, 23); // Note: the month index starts at zero
给出:
Eastern: 2018-08-23 00:00:00
GMT: 2018-08-23 04:00:00
然后致电Date.setHours(19)
以获得:
Eastern: 2018-08-23 19:00:00
GMT: 2018-08-23 23:00:00
有关演示,请参见this stackblitz。