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
从零开始。