我知道有关日期/时间存储和格式的问题很多,但我一直在努力寻找正确的方法。我的应用程序是带有Express的Node.js应用程序,该应用程序使用带MongoDB后端的猫鼬。我正在使用moment.js格式化日期/时间。
有问题的模式如下:
const stateSchema = new mongoose.Schema({
changed: {
type: Date,
default: new Date()
}
});
基于docs,我希望默认情况下将日期存储在UTC中,但我看到的是:
changed: 2018-08-15 17:26:14.499
我用(pug)之类显示日期/时间:
p= `Changed: ${moment(state.changed).format('MMMM Do YYYY, h:mm:ss a')}`
在本地主机上,该应用程序显示“ 2018年8月15日,下午5:26:14”,但在托管的Heroku应用程序中,我显示“ 2018年8月15日,晚上10:26:14”。我期待“ 2018年8月15日,下午5:26:14”,因为我将在同一时区打开Heroku应用,但它似乎为我提供了服务器时区。
我该怎么做才能确保日期/时间显示在客户的本地时区?
答案 0 :(得分:0)
我认为这就是答案。这给了我在localhost上的错误时间,但是无论我在哪里,都应该是在托管应用程序上的正确时间。
为架构添加偏移量:
const stateSchema = new mongoose.Schema({
changed: {
type: Date,
default: new Date()
},
offset: {
type: Number,
default: new Date().getTimezoneOffset()
}
});
然后在显示时减去偏移量:
p= `Changed: ${h.moment(state.changed.getTime() - (state.offset * 60000)).format('MMMM Do YYYY, h:mm:ss a')}`