如何正确地将猫鼬模型与生日进行jsonify?

时间:2013-08-08 14:22:05

标签: json date mongoose

如何使用猫鼬存储像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的安慰。

1 个答案:

答案 0 :(得分:1)

问题在于您的日期创建方式。 我建议您使用UTC时间的日期作为生日等数据,这样您就可以在整个系统中使用UTC时间。

你可以:

  • 在构造函数中以UTC格式设置日期,并以UTC格式向其提供字符串: new Date('1986-09-14T00:00:00.000Z');
  • 使用new Date(Date.UTC(year, month, day, 0, 0, 0));从整数年,月和日创建日期对象。

因此,答案是:在创建/更新模型时,您应生日字段中存储UTC日期。