Angular 角度日期对象设置小时使日期为前一天

Angular 角度日期对象设置小时使日期为前一天,angular,datetime,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。因此,我的问题是,为什么要将它改为前一天,我如何才能阻止这种情况发生?这将为您提供您想要的: new Date(new Date('2018-08-23')

当我运行这两行时:

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

这将为您提供您想要的:

new Date(new Date('2018-08-23').setHours(19))
以下是我的控制台的各种输出:

new Date('2018-08-23')
2018年8月23日星期四01:00:00 GMT+0100(英国夏季时间)

153504720000

new Date('2018-08-23').setHours(19)
new Date(new Date('2018-08-23').setHours(19))
153504720000

new Date('2018-08-23').setHours(19)
new Date(new Date('2018-08-23').setHours(19))
2018年8月23日星期四19:00:00 GMT+0100(英国夏季时间)

似乎setHours返回的是时间戳而不是日期,因此您需要根据时间戳创建一个新的日期

或者,使用moment.js库,它更容易使用。

使用字符串参数调用创建UTC日期。如果您在GMT-0400(东部),调用
新日期('2018-08-23')
将导致:

Eastern: 2018-08-22 20:00:00
GMT:     2018-08-23 00:00:00
Eastern: 2018-08-22 19:00:00
GMT:     2018-08-22 23:00:00
调用
Date.setHours(19)
时,设置小时数,结果是:

Eastern: 2018-08-22 20:00:00
GMT:     2018-08-23 00:00:00
Eastern: 2018-08-22 19:00:00
GMT:     2018-08-22 23:00:00

您可以为本地时间创建一个接受多个参数的日期:

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

请参阅演示。

这确实有效,感谢您解释发生的原因。但是当我创建一个新的日期,比如
newdate(2018,8,23)
它说月份是9月?例如,当I
.toISOString()
日期对象返回的月份为9Oh yes时,我将更正该错误。使用该日期构造函数,
monthIndex
从零开始。