角度日期对象设置小时使日期早于前一天

时间:2018-08-23 15:58:36

标签: angular datetime

当我运行这两行时:

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。所以我的问题是,为什么要将它更改为前一天?如何阻止这种情况发生?

2 个答案:

答案 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