为什么Mongodb的ISO日期会提前一天显示?

时间:2017-09-27 16:14:52

标签: node.js mongodb mongoose mongoose-schema

存储日期如下所示:

...
"date_of_birth" : ISODate("1920-01-02T00:00:00Z"),
...

使用片刻,它在模型中格式化(为了填充输入以更新文档),如下所示:

   AuthorSchema
   .virtual('date_of_birth_update_format')
   .get(function(){
      // format in JavaScript date format (YYYY-MM-DD) to display in input type="date"
      return this.date_of_birth ? moment(this.date_of_birth).format('YYYY-MM-DD') : '';
   });

从集合中检索并显示,它显示为提前一天:

01/01/1920

感谢您解决此问题。

3 个答案:

答案 0 :(得分:0)

ISO 8601格式中的Z表示' GMT'即1920-01-02T00:00:00+0000。时刻将考虑您的时区。如果您位于美国大陆,则您的时区偏移为-0400 - -0800

1920-01-02T00:00:00Z = 1920-01-01T6:00:00-0600例如在太平洋标准时间内。

答案 1 :(得分:0)

这取决于您所在的时区,例如我在印度,所以GMT对我来说是+5:30,所以每当我从db检索时,我会将5:30添加到时间,以便它与日期匹配回答为什么它在前一天存储它,因为它以ISO格式存储日期

答案 2 :(得分:0)

mongo的日期始终为GMT,您的服务器可能位于其他时区。您需要在格式化之前将日期转换为GMT。

var moment = require("moment-timezone")

AuthorSchema.virtual('date_of_birth_update_format').get(function(){
 return this.date_of_birth ? moment(this.date_of_birth).tz('GMT').format('YYYY-MM-DD') : '';
});