MongoDB + JS日期转移了-1天

时间:2016-11-04 13:46:25

标签: javascript mongodb date momentjs

我尝试使用

在我的mongodb文档中添加新日期
db.collection('course').insertOne({
    date: new Date(item.date)
});

item.date来自

items.push({
    date: moment(new Date(day.label)).tz('Europe/Paris').format('YYYY/MM/DD'),
});

day.label'14 November 2016'

类似

item.date格式化为2016/11/14

文档插入工作但日期未正确格式化,例如2016/11/14 Mongo insert "date" : ISODate("2016-11-13T23:00:00Z")

每个插入的日期都会移动-1天

在MongoDB中插入自定义格式化日期的正确方法是什么? 我应该改变momentJs的日期格式吗?

编辑:

由于时区不同,日期会发生变化。

2 个答案:

答案 0 :(得分:1)

它没有一天转移,它实际上根本没有转移。

显示的时间移动了一个小时。如果您注意到,时间已经是前一天的23:00,而不是默认为您指定的日期的午夜。

更重要的是,时间戳中的Z后缀表示时区为UTC,UTC中的2016-11-13T23:00:00表示与时间戳2016-11-14T00:00:00+01:00相同的时刻。因此正确创建了日期时间,但只是在您正在创建它的不同时区向您显示。

答案 1 :(得分:0)

如果您想要解决所有日期UTC问题,请存储 日期作为标准ISO格式

// India
moment().toISOString() // "2016-11-06T06:17:33.520Z"

// canada
moment().toISOString() // "2016-11-06T06:19:42.133Z"

now see the diffrence by convering date from database

// canada time zone
moment("2016-11-06T06:19:42.133Z").format() // "2016-11-05T23:19:42-07:00"

// india time zone 
moment("2016-11-06T06:19:42.133Z").format() //"2016-11-06T11:49:42+05:30"

如上所示,看到本地UTC的差异,因此不必转换任何日期 时区到其他时区