我在 mongo 中将 ISODate 作为 ISODate,我想将其以字符串格式和特定的日期时间格式。
这是 ISODate:
ISODate("2020-04-24T11:41:47.280Z")
预期结果:
"2020-04-24T11:41:47.280Z"
我希望这仅发生在 mongodb 上,因为我的许多服务都期望采用这种格式,并且我不想对所有服务进行更改,因为这是一项乏味的工作。
我在尝试以下操作时得到了预期的结果。
ISODate("2020-04-24T11:41:47.280Z").toJSON()
这将把字符串还给我
"2020-04-24T11:41:47.280Z"
也许只是将日期转换为字符串?这与 mongo 关系不大,与 js 关系不大。 moment 很棒,但在 mongo shell 脚本中无法使用。
db.events.find().forEach(function(doc) {
// printjson ("Document is " + doc);
var isoDate = doc.t; // t is correct key?
var isoString = isoDate.toISOString()
// update the collection with string using a new key
db.events.update(
{"_id":doc._id},
{
$set: {"iso_str":isoString}
}
);
// or overwrite using 't' key db.events.update({"_id":doc._id},{$set:{"t":isoString}});
})
我刚刚遇到这个问题。事实证明,ISODate 中没有内置任何内容。因此,我将 ISODate 转换为 JSON 文本,然后执行一个子字符串来获取我想要的部分。您还可以使用 ISODate 上的方法分别获取年、月、日,然后将它们组合起来。
function formatDate(isoDate){
return isoDate.toJSON().substr(9, 20);
}
我遇到了这个问题,因为我想要这种特定的格式
YYYY-MM-DD HH:MM:SS
,所以我只是使用String
构造函数方法来获取包含其中所有组件的字符串。
例如,对于存储在某些文档的
2023-11-15 08:55:05.426Z
字段中的日期 datetime
,如果我调用:
String(doc.datetime)
我得到:
Wed Nov 15 2023 08:55:05 GMT+0200 (EET)
所以我编写了一个自定义函数来按照我想要的方式重新格式化该字符串。
这是最终的功能:
function dateToString(date) {
var monthMapper = {
Jan: 1,
Feb: 2,
Mar: 3,
Apr: 4,
May: 5,
Jun: 6,
Jul: 7,
Aug: 8,
Sep: 9,
Oct: 10,
Nov: 11,
Dec: 12
};
var dateComponents = date.split(' ');
var month = dateComponents[1];
var day = dateComponents[2];
var year = dateComponents[3];
var time = dateComponents[4];
return year + '-' + monthMapper[month] + '-' + day + ' ' + time;
}
因此,使用
String
构造函数,您可以获得一个易于操作的字符串。
我假设您需要的是 dateToString 函数 https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/
db.inventries.find().forEach(function (doc) {
let mydate = new Date(doc.date).toISOString();
db.inventries.update({ "_id": doc._id }, { $set: { "date": ISODate(mydate) } })
})
new Date(orderData.createdAt).toLocaleDateString()//=>27/6/2024
new Date(orderData.createdAt).toLocaleString()//=>27/6/2024, 4:49:38 pm