我希望以 12 小时格式在聚合 $project 管道中格式化日期。
$project: {
UpdateDt:
{
$dateToString: { format: "%m/%d/%Y ,%H:%M:%S", date: "$UpdateDt", timezone: "GMT" }
},
}
我尝试使用上面的代码,但这似乎不起作用,我还希望日期格式为: 2017 年 8 月 31 日,格林威治标准时间上午 10:30:00 使用上面的代码,我得到的输出为 09/14/2017,15:07:10 要求日期为 12 小时格式并附加 GMT,与使用 .toLocaleString() 函数实现的相同。
请提出任何相同的方法/解决方法。
答案 0 :(得分:1)
演示 - https://mongoplayground.net/p/fIlimwXuOWK
在第一个管道中 - $addFields
添加一个新字段 UpdateNewDt
,其中包含 {date, hour, time}
格林威治标准时间的详细信息。
第二个管道 - $set
UpdateNewDt.hour
转换为 12 小时制并添加 AM 和 PM 例如:- 12 - 12 PM、02- 02 AM、23- 11 PM
第三条管道 - $set
将数据组合回字符串
第四管道 - $project
- UpdateDt
db.collection.aggregate([
{
"$addFields": {
UpdateNewDt: {
date: { $dateToString: { format: "%m/%d/%Y ,", date: "$UpdateDt", timezone: "GMT" }},
hour: { $dateToString: { format: "%H", date: "$UpdateDt", timezone: "GMT" }},
time: { $dateToString: { format: ":%M:%S", date: "$UpdateDt", timezone: "GMT" }}
}
}
},
{
$set: {
"UpdateNewDt.hour": {
$cond: {
"if": { $gt: [ { "$toInt": "$UpdateNewDt.hour" }, 11 ] },
"then": {
"$concat": [
{
$cond: [
{ $eq: [{ "$toInt": "$UpdateNewDt.hour"},12 ] },
"12",
{ $toString: {"$subtract": [ { "$toInt": "$UpdateNewDt.hour" }, 12 ] }}
]
},
" PM" ]
},
"else": { "$concat": [ "$UpdateNewDt.hour", " AM" ] }
}
}
}
},
{
$set: {
"UpdateNewDt": {
"$concat": [
"$UpdateNewDt.date",
{ "$arrayElemAt": [{ "$split": [ "$UpdateNewDt.hour", " " ] }, 0 ] },
"$UpdateNewDt.time",
" ",
{ "$arrayElemAt": [{ "$split": [ "$UpdateNewDt.hour", " " ] }, 1 ] }
]
}
}
},
{
$project: { UpdateDt: "$UpdateNewDt" }
}
])
输入 -
[
{
"key": 1,
UpdateDt: ISODate("2021-04-06T02:07:47.231Z")
},
{
"key": 2,
UpdateDt: ISODate("2021-04-06T22:07:47.231Z")
},
{
"key": 3,
UpdateDt: ISODate("2021-04-06T12:07:47.231Z")
}
]
输出 -
[
{
"UpdateDt": "04/06/2021 ,02:07:47 AM",
"_id": ObjectId("5a934e000102030405000000")
},
{
"UpdateDt": "04/06/2021 ,10:07:47 PM",
"_id": ObjectId("5a934e000102030405000001")
},
{
"UpdateDt": "04/06/2021 ,12:07:47 PM",
"_id": ObjectId("5a934e000102030405000002")
}
]
答案 1 :(得分:0)
我认为不支持。
以下是 $dateToString
的官方文档:https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/
对于指定的可用格式,只有 24 小时制。
如果您不需要在聚合步骤中对其进行格式化,我建议您使用 date-fns
包。您只能导入 format
函数,并且可以按照您需要的格式设置日期格式。
答案 2 :(得分:0)
嗨,据我所知,您可以使用以下脚本
收藏 “用户”:[ { "_id": 3, "ts": ISODate("2016-06-18T18:30:00.288Z") } ]
查询
db.users.aggregate([
{
$project: {
"date": {
"$dateToString": {
"format": "%m/%d/%Y ,%H:%M:%S",
"date": "$ts",
"timezone": "GMT"
}
}
}
}
])
输出
[
{
"_id": 3,
"date": "06/18/2016 ,18:30:00"
}
]