MomentJS 保持默认日期为 GMT

MomentJS keeps defaulting date to GMT

我有

moment(line.dateRange[0], 'DD-MM-YY HH:mm').toDate()

设置,其中输入为字符串:15-10-2021 09:00

Moment 一直在输出:2020-10-15T07:00:00.000Z,即使我的 nodeJS 服务器的 process.env.TZEurope/Amsterdam

for (const line of orderLines) {
      
    let orderLine = {
            bookingID: bookingDB.id,
            bookingStart: moment(line.dateRange[0], 'DD-MM-YY HH:mm').format(),
            bookingEnd: moment(line.dateRange[1], 'DD-MM-YY HH:mm').format(),
            productID: line.productID,
            type: line.type
         }
         console.log(orderLine)
         lines.push(orderLine);
      }
      const orderLinesDB = await BookingLine.bulkCreate(lines);
      console.log(orderLinesDB)
      res.status(200).send(orderLinesDB);

我怀疑您正在看到输出 2020-10-15T07:00:00.000Z 因为您正在做:

console.log(moment('15-10-2021 09:00', 'DD-MM-YY HH:mm').toDate())

您在输出中看到的是 UTC 时间,比 Europe/Amsterdam 晚 2 小时,因为 Node.js 在记录日期时调用 toISOString()。

尝试调用 moment.format() to see local time, or use .toDate().toLocaleString() or .toDate().toString().

例如:

const input = '15-10-2021 09:00';

console.log('UTC time:', moment(input, 'DD-MM-YY HH:mm').toDate())
console.log('Local time:', moment(input, 'DD-MM-YY HH:mm').format())
console.log('Local time (II):', moment(input, 'DD-MM-YY HH:mm').toDate().toLocaleString())
console.log('Local time (III):', moment(input, 'DD-MM-YY HH:mm').toDate().toString())

应该输出

 UTC time: 2020-10-15T07:00:00.000Z
 Local time: 2020-10-15T09:00:00+02:00
 Local time (II): 15/10/2020, 09:00:00
 Local time (III): Thu Oct 15 2020 09:00:00 GMT+0200 (Central European Summer Time)

这是我们所期望的。