【问题标题】:MongoDB + JS Date shifted -1 dayMongoDB + JS 日期偏移 -1 天
【发布时间】:2017-03-18 09:12:48
【问题描述】:

我正在尝试在我的 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 插入 "date" : ISODate("2016-11-13T23:00:00Z")

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

在 MongoDB 中插入自定义格式化日期是否正确? 我应该更改 momentJs 日期格式吗?

编辑:

由于时区不同,日期有所变动。

【问题讨论】:

  • 巴黎与 UTC 位于不同的时区,所以这就是您的差异所在。我个人会将日期存储为时间戳,并在读出时将其转换回日期对象
  • 是的,我刚刚注意到...我将尝试使用时间戳。谢谢
  • 您应该始终告诉解析器您要解析的格式,否则它必须猜测。

标签: javascript mongodb date momentjs


【解决方案1】:

一天都没有改变,实际上根本没有改变。

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

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

【讨论】:

    【解决方案2】:

    如果您想为所有日期 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 的差异,因此不必从任何转换日期 时区到其他时区

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 2011-09-08
      • 2018-02-03
      • 2010-10-22
      • 2021-12-31
      • 2021-07-07
      相关资源
      最近更新 更多