JavaScript时间倒退

时间:2018-02-21 00:37:46

标签: javascript datetime mongoose

在我的代码中,我有一个工作班次对象,使用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点,为什么时间会倒退。

另外,我如何解决这个问题,以便按照我的意图出现时间?提前谢谢。

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