我应该如何存储/显示我的日期/时间字段?

时间:2018-08-15 22:51:19

标签: node.js mongodb mongoose momentjs

我知道有关日期/时间存储和格式的问题很多,但我一直在努力寻找正确的方法。我的应用程序是带有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应用,但它似乎为我提供了服务器时区。

我该怎么做才能确保日期/时间显示在客户的本地时区?

1 个答案:

答案 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')}`