ti-enxame.com

Existe uma maneira de exibir o carimbo de data / hora em formato unix para ISODate?

Armazenamos uma data usando o carimbo de data/hora unix no MongoDB, como obtenho a data quando faço a consulta? Existe uma maneira de exibir o carimbo de data/hora no formato ISODate?

13
Adam Lee

Fundo

  • Um valor nixtime representa segundos desde a Época (1 de janeiro de 1970).

  • A JavaScript Date () representa milissegundos desde a época.

  • No MongoDB, ISODate() é um wrapper de conveniência para Date() que permite criar datas a partir de strings ISO no mongo Shell. Se você usar new Date() no Shell, ele retornará um ISODate().

Conversão

Para converter entre um unixtime e um ISODate (), você pode multiplicar seus carimbos de data/hora Unix por 1000 e passar esse valor para o construtor new Date().

Um exemplo simples no 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")
13
Stennie

No console Mongo, você pode criar um objeto JavaScript Date a partir de um carimbo de data/hora antes de o documento ser impresso na tela:

> db.stuff.find().forEach(function (doc) {
  doc["timestamp_field"] = new Date(doc["timestamp_field"])
  printjson(doc)
})

Tenha cuidado com esse código, ao contrário de um find() regular, ele não irá paginar os resultados, mas imprimirá todos os documentos correspondentes sem pausa.

5
Theo

O Mongodb 4.0 introduziu $toDate agregação, então você pode tentar com ela

db.collection.aggregate([
  { "$project": {
    "toDate": {
      "$toDate": "$unixTimestamp"
    }
  }}
])

Experimente aqui

3
Ashh