mongoose和express.js中日期冲突

Conflicting dates in mongoose and express.js

本文关键字:日期 冲突 js express mongoose      更新时间:2024-06-09

当我用Date而不是String类型声明模式时,就会出现问题。

案例一:

var MySchema = new Schema({
    created_at: {type: String, default: ''}
});

通过这个shema声明,我使用moment.js moment-timezone模块来声明亚洲/加尔各答时区的当前时间。

var tmoment = require('moment-timezone');
var currentTime = tmoment().tz('Asia/Kolkata').format('llll');

而且我能得到正确的时间。

案例二:

var MySchema = new Schema({
    created_at: {type: Date, default: ''}
});

通过这个shema声明,我使用moment.js moment-timezone模块来声明亚洲/加尔各答时区的当前时间。

var tmoment = require('moment-timezone');
var currentTime = tmoment().tz('Asia/Kolkata').format('llll');

但是现在时间不是按照时区来的。我甚至尝试了以下声明

var tmoment = require('moment-timezone');
var currentTime = tmoment().tz('Asia/Kolkata').format();

但是找不到解决方案。

当您将日期保存到mongo数据库时,您可以简单地保存一个javascript Date对象,而不考虑时区。(如情况2所示,使用Date类型。)然后,您将使用moment来在所需的任何时区显示日期

保存对象:

var id = ...
var saveReq = new RequestModel({ _id: id, created_at: new Date() });
saveReq.save(function (err, result) {
  // ...
});

从数据库中读取对象,然后显示本地化日期字符串:

var tmoment = require('moment-timezone');
RequestModel.findOne({_id: id}, function (err, doc) {
  if(err) {} // ...
  var created = doc.created_at;
  var display = tmoment(created).tz('Asia/Kolkata').format('llll');
  console.log(display);
});

将服务器时区更改为本地时区。