【问题标题】:Mongoose saving and retrieving dates with UTC time, change to server timezoneMongoose 使用 UTC 时间保存和检索日期,更改为服务器时区
【发布时间】:2017-04-24 14:25:15
【问题描述】:

我正在使用猫鼬模型来保存我的记录,包括创建和更新日期。这是我的模型架构:

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 字段将日期时间保存为ISODate("2017-04-24T12:40:48.193Z"),这是UTC,但我的服务器的时区是Asia/Calcutta。由于我需要根据服务器的时间进行查询,因此我需要将日期时间保存在我的首选时区中。

这是我需要执行的查询(获取过去 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 天的所有更新记录,即从 10 天前的午夜(Asia/Calcutta 时区)到今天的午夜(Asia/Calcutta 时区)。我该怎么做?

【问题讨论】:

    标签: node.js mongodb datetime mongoose timezone


    【解决方案1】:

    我想要进行查询以获取过去 10 天的所有更新记录,确切地说是从 10 天前的午夜(亚洲/加尔各答时区)到今天的午夜(亚洲/加尔各答时区)。我该怎么做?

    如果“今天的午夜”是指上一个发生的午夜(在这种情况下,您不会得到刚才的结果),那么您可以使用一些东西像这样 - 使用您当地的时区:

    // 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 日期,可以在 Mongo 查询中使用。

    在 Mongo 中无需更改任何内容。

    【讨论】:

    • 感谢您的回答。我知道在 db 中存储时区中性时间是正确且可扩展的方法,但就我所知,您能告诉我如何将本地时区保存在 dB 中吗?
    • @gaganshera Mongo 不支持时区。查看这张 Jira 票:jira.mongodb.org/browse/SERVER-6310
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多