存储日期如下所示:
...
"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
感谢您解决此问题。
答案 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') : '';
});