我正在使用存储在佛教年份中的日期时间数据,但我需要将其转换为公历年份。
其实,有一个简单的解决方案(代码如下)。
{
"$dateSubtract": {
"startDate": {
"$dateFromString": {
"dateString": "$receive_date",
"format": "%d/%m/%Y %H:%M"
}
},
"unit": "year",
"amount": 543
}
}
它在大多数情况下都有效,但如果
receive_date
是29/2/2567,它会抛出错误,因为公历年的2567不是闰年,而是佛教年。
您对解决这个问题有什么建议吗?
您可以将原始日期
$split
转换为标记,并使用$dateFromParts
在$subtract
之后重建佛教日期。
db.collection.aggregate([
{
"$set": {
"dateTokens": {
"$map": {
"input": {
"$split": [
"$receive_date",
"/"
]
},
"as": "token",
"in": {
"$toInt": "$$token"
}
}
}
}
},
{
"$set": {
"buddhist_date": {
"$dateFromParts": {
"year": {
"$subtract": [
{
"$arrayElemAt": [
"$dateTokens",
2
]
},
543
]
},
"month": {
"$arrayElemAt": [
"$dateTokens",
1
]
},
"day": {
"$arrayElemAt": [
"$dateTokens",
0
]
}
}
}
}
},
{
"$unset": "dateTokens"
},
{
"$merge": {
"into": "collection",
"on": "_id"
}
}
])