1

如何在忽略时区的情况下存储像09/14/1986猫鼬一样的生日并将其转换为 json ?toJSON

假设您有一个类似的架构

schema = new mongoose.Schema({
  birthday: Date
});

并且您将生日存储在上面,mongoose实际上将其存储为Date(527032800000). 现在,当您调用toJSON模型时,它会使用JSON.stringify. Dates 被转换为一个字符串toISOString,结果是1986-09-13T22:00:00.000Z(在具有德国时区设置的机器上:)Europe/Berlin。如您所见,这不是我们可能期望的生日日期,因为时区已被解释(请参见此处的类似问题)。

该怎么办?我不想失去解析各种生日字符串和使用 mongoose 的舒适性toJSON

4

1 回答 1

1

问题在于创建日期的方式。我建议您将 UTC 时间的日期用于生日等数据,这将允许您在整个系统中使用 UTC 时间。

您可以:

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

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

于 2013-08-10T02:20:11.410 回答