Mongoose使用UTC时间保存和检索date,更改为服务器时区

我正在使用mongoose模型来保存我的logging,包括创build和更新的date。 这是我的模型模式:

var CasesModelSchema = new mongoose.Schema( { caseId: Number, sessionId: String, createdAt: {type: Date}, updatedAt: {type: Date, default: Date.now}, docs: mongoose.Schema.Types.Mixed }, { collection: 'cases' } ); 

我面对的问题是updatedAt字段将date时间保存为ISODate("2017-04-24T12:40:48.193Z") ,这是UTC,但我的服务器的时区是Asia/Calcutta 。 由于我需要根据服务器的时间进行查询,所以我需要将date时间保存在我的首选时区。

这是我需要执行的查询(获取过去10天的所有数据)

 var today = moment(moment().format('YYYY-MM-DD')).toDate(); var tenDaysDate = moment(moment().format('YYYY-MM-DD')).add(-10, 'days').toDate(); CasesModel.findOne({updatedAt: {$gte: tenDaysDate, $lt: today}}, function(err, caseData){ cl(caseData, __line); }); 

我想要的是在10天前的Asia/Calcutta时区到今天的午夜( Asia/Calcutta时区)的最后10天内,查询所有更新的logging。 我怎么做?

我想要的是在10天前的亚洲/加尔各答时区到今天的午夜(亚洲/加尔各答时区)的最后10天内,查询所有更新的logging。 我怎么做?

如果“今天的午夜”是指发生的最后一个午夜(在这种情况下,你将不会得到结果),那么你可以使用类似的东西 – 使用你的本地时区:

 // use moment-timezone to handle time zones correctly: const moment = require('moment-timezone'); let end = moment().startOf('day').tz('UTC') let start = end.subtract(10, 'days'); 

或明确使用亚洲/加尔各答时区:

 let end = moment.tz('Asia/Calcutta').startOf('day').tz('UTC'); let start = end.subtract(10, 'days'); 

如果“今天的午夜”是指将发生的下一个午夜(在这种情况下,你得到结果),那么你可以使用这样的东西 – 使用你的本地时区:

 let end = moment().endOf('day').tz('UTC') let start = end.subtract(10, 'days'); 

或明确使用亚洲/加尔各答时区:

 let end = moment.tz('Asia/Calcutta').endOf('day').tz('UTC'); let start = end.subtract(10, 'days'); 

你将有UTC时间对应于你当地的midnights,准备在Mongo查询中使用。

Mongo中无需改变任何东西。