我在 mongodb 中以 UTC 时间格式插入了数据。我希望根据时区转换时间。在 mongo 查询中是否有可能这样做?
最佳答案
让我们考虑您的文档包含 ISODate
如下:
db.collection.insert({"date":new Date()})
以上查询以
date
格式插入 ISODate
现在您想将此 ISODate
转换为 give timeZone
。假设您想将上述日期转换为
Eastern Daylight Saving Time ( EDT )
epoch time zone conertor 然后 offset
转换为 14400 * 1000
。首先将ISODate
转换为timeStamp
,然后再次使用substract
EDT Offset in
timeStamp and then convert
timeStamp to
ISODate`。检查以下聚合查询:
db.collection.aggregate({
"$project": {
"timestamp": { //convert ISODate tom timestamp
"$subtract": [{
"$divide": [{
"$subtract": ["$date", new Date("1970-01-01")]
}, 1000]
}, {
"$mod": [{
"$divide": [{
"$subtract": ["$date", new Date("1970-01-01")]
}, 1000]
}, 1]
}]
}
}
}, {
"$project": {
"timeZoneTimeStamp": {
"$subtract": [{ //substract timestamp to given offset if offset will in postive then replace subtract to add
"$multiply": ["$timestamp", 1000]
}, 14400000]
}
}
}, {
"$project": {
"timeZoneTimeStamp": 1, //converted timeZoneTimeStamp if required
"_id": 0,
"newDate": { // newDate is converted timezone ISODate
"$add": [new Date(0), "$timeZoneTimeStamp"]
}
}
})
注意 :
在上面从
ISODATE
到 timeStamp
ref. here 的查询转换中