在我的代码中,我有一个工作班次对象,使用mongoose将班次的开始和结束时间保存到MongoDB中,如下所示
{
startDateTime: new Date(2018, 1, 8, 7),
endDateTime: new Date(2018, 1, 8, 13)
}
但是,在检索数据并通过console.log()
打印出来后,结果现在看起来像这样
startDateTime: 2018-02-08T05:00:00.000Z,
endDateTime: 2018-02-07T16:00:00.000Z
据我所知,使用new Date()
时,它会根据开发计算机上的本地时间转换为UTC时间。但是,我不明白的是,如果我的目的是将日期设定为2018年2月8日上午7点至下午1点,为什么时间会倒退。
另外,我如何解决这个问题,以便按照我的意图出现时间?提前谢谢。
答案 0 :(得分:1)
日期倒退的原因是我通过Date JS使用clearTime()
。 clearTime()
的目的是将时间重置为当地时间00:00。这是通过Array.protoype的filter()
方法完成的,其中我有一系列员工轮班,我试图按用户请求的日期范围过滤掉班次,而不是我在系统中的班次。
我没有怀疑会发生这种情况,因为Array.prorotype的filter()
用于指定保留数组元素的条件。然而,使用clearTime()
似乎已经改变了转变的结束时间,这引发了这段时间的旅行之谜。
我解决这个问题的方法是创建一个单独的变量来存储结束时间,并使用JavaScript setUTCHours()
强制设置转换的结束时间为00:00 UTC时间。
我为此问题提供的上一个答案是指以UTC时间存储时间以避免时区问题。然而,这导致了将时间转换回当地时间的进一步复杂化,因此我找到了一个替代解决方案,以解决我在努力保留时间和时区支持时遇到的问题。然后我发现问题不是UTC时间,而是由于使用了Date JS。