如何使用猫鼬存储像09/14/1986
这样的生日,并将其转换为json
toJSON
忽略了时区?
假设您有一个类似
的架构schema = new mongoose.Schema({
birthday: Date
});
并且您存储了上面的生日,mongoose
实际上将其存储为Date(527032800000)
。现在,当您在模型上调用toJSON
时,会使用JSON.stringify
进行转换。 Date
被转换为toISOString
的字符串,结果为1986-09-13T22:00:00.000Z
(在具有德语时区设置的计算机上Europe/Berlin
)。正如您所看到的,这不是我们对生日所期望的日期,因为时区被解释(请参阅类似的问题here)。
怎么办?我不想失去解析各种生日字符串和使用mongoose toJSON
的安慰。
答案 0 :(得分:1)
问题在于您的日期创建方式。 我建议您使用UTC时间的日期作为生日等数据,这样您就可以在整个系统中使用UTC时间。
你可以:
new Date('1986-09-14T00:00:00.000Z');
new Date(Date.UTC(year, month, day, 0, 0, 0));
从整数年,月和日创建日期对象。因此,答案是:在创建/更新模型时,您应在生日字段中存储UTC日期。