We stored a date using unix timestamp in MongoDB, how do I get the date when I do the query? Is there a way to display timestamp in ISODate format?
Mongodb 4.0 has introduced $toDate aggregation, so you can try with it
db.collection.aggregate([
{ "$project": {
"toDate": {
"$toDate": "$unixTimestamp"
}
}}
])
Try it here
A unixtime value represents seconds since the epoch (Jan 1, 1970).
A JavaScript Date() represents milliseconds since the epoch.
In MongoDB, ISODate() is a convenience wrapper for Date()
that allows you to create dates from ISO strings in the mongo
shell. If you use new Date()
in the shell, it will return an ISODate()
.
To convert between a unixtime
and an ISODate() you can multiply your unix timestamps by 1000 and pass this value to the new Date()
constructor.
mongo
shell:> db.mydata.insert({
unixtime: 1362143511
})
> var doc = db.mydata.findOne();
// convert unixtime seconds to milliseconds and create JS date
> var date = new Date(doc.unixtime * 1000);
> date
ISODate("2013-03-01T13:11:51Z")
In the Mongo console you can create a JavaScript Date
object from a timestamp before the document is printed to the screen:
> db.stuff.find().forEach(function (doc) {
doc["timestamp_field"] = new Date(doc["timestamp_field"])
printjson(doc)
})
Be careful with that code, unlike a regular find()
it will not page the results but print every matching document without pausing.