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中无需改变任何东西。