使用mongo $ hour检索本地时间信息

问题描述 投票:0回答:2

我目前在mongob模型的帮助下将文档存储在mongodb中。按日期查询工作正常,但是当我尝试应用$ hour运算符时,似乎返回ISO时间,而不是本地时间。

当前的命名约定为我提供了一个文件名,其中包含创建文件的时间戳:YYYYMMDDHHMMSS-foo-bar.file

示例:DB中的导入导致解析时间戳的以下值:2014 04 02 07 57 33-foo-bar.file被解析为ISODate("2014-04-02T05:57:33Z")

当我查询找到这个项目时:我创建这样的新日期对象(日期是假的,只是为了我选择的查询方法):

var begin = new Date(2014, 01, 10, 13, 00, 00);
var end = new Date(2014, 01, 10, 20, 00, 00);

db.pinas.aggregate([{
    $project: {
        [attributes I need...]
    }
, {
    $match: {
        'start_time': {
            $gte: begin, //ISODate
            $lt: end //ISODate
        }
    }
}]);

再次,这些ISOD似乎不存储时区信息,虽然in this post ISODates包含一些东西:注意尾随+01:00 ISODate("2012-07-14T01:00:00+01:00")

现在我有两个问题/问题:

我在某处读到,在ISODates中返回datetime信息的重点是将“精细工作”转移到应用程序而不是DBMS,这是真的:它在解析ISODatestring的情况下工作,我检索正确的时间(I通过了解我的本地设置来假设?如果服务器在另一个时区怎么办?)

当我想使用$hour日期聚合运算符时,我该如何将它带回当地时间?当我只返回$ hour时,它是如何工作的?

node.js mongodb mongoose mongodb-query aggregation-framework
2个回答
1
投票

从版本3.6开始,您可以添加时区属性以在正确的时间内获取小时:

{ date: <dateExpression>, timezone: <tzExpression> }

例如:

{ $hour: {
    date: new Date("August 14, 2011Z"),
    timezone: "America/Chicago"
} }

有关详细信息,请参阅$ hour documentation https://docs.mongodb.com/manual/reference/operator/aggregation/hour/


0
投票

除了UTC之外,MongoDB不支持任何时间。您需要在其他时区完成任何操作需要在客户端完成,因此您需要将MongoDB提供的$hour值调整为您自己代码中的本地时间。

请参阅日期的getTimezoneOffset()方法,并注意夏令时。

不理想,但就是这样。

© www.soinside.com 2019 - 2024. All rights reserved.