没有时间戳记值的JS日期对象错误地回溯到一天

时间:2019-02-04 12:02:38

标签: javascript jestjs

在下面的终端输出中,通过将moment.js对象转换回Date对象来生成-(已接收)对象。 +(预期)对象以new Date("2018-05")格式创建,似乎浪费了很多时间,以致无法回到上个月最后一天的下午5点:

        Object {
    -     "x": 2018-05-01T00:00:00.000Z,
    +     "x": 2018-04-30T17:00:00.000Z,
          "y": 260,
        },
        Object {
    -     "x": 2018-06-01T00:00:00.000Z,
    +     "x": 2018-05-31T17:00:00.000Z,
          "y": 160,
        },
        Object {
    -     "x": 2018-07-01T00:00:00.000Z,
    +     "x": 2018-06-30T17:00:00.000Z,
          "y": 40,
        },

测试代码和测试期望代码都在我的计算机上,所以我不理解为什么日期对象略有变化,有人知道为什么吗?这是我开玩笑的测试代码:

test('raw data is properly totalled (prepareData)', () => {
  expect(lineChart.prepareData(mockXYObjects(dataCloneMultiplier), 12, "month"))
    .toStrictEqual([
      {x : new Date("2018-05"), y : 13 * dataCloneMultiplier},
      {x : new Date("2018-06"), y : 8 * dataCloneMultiplier},
      {x : new Date("2018-07"), y : 2 * dataMultiplier},
    ])
});

1 个答案:

答案 0 :(得分:1)

我猜你住在西半球吗?没有时间戳,Date对象将初始化为UTC时间,而不是您所在的时区。因此,时间将是UTC的午夜,但如果您是东部时区,则将是前一天的19:00EST。解决方案是在创建日期字符串时将所需的时区添加到日期字符串中。