2013-07-24 8 views
6

In MongoDB Shell su Windows se si esegue una query con un valore diPerché MongoDB guscio nuovo isodate (0001-01-01) restituisce risalgono 1901/01/01

new ISODate('0001-01-01T00:00:00Z') 

in realtà sembra per cercare

new ISODate('1901-01-01T00:00:00Z') 

Se si digita "nuova isodate ('0001-01-01T00: 00: 00Z')" direttamente nel Mongo shell è possibile vedere questa conversione che si svolgono come si ritorna isodate ("1901-01-01T00: 00: 00Z ").

Stranamente, quando si utilizza "nuovo Data" invece di "nuova isodate" immettendo:

new Date('0001-01-01T:00:00:00Z') 

restituisce isodate ("0001-01-01T00: 00: 00Z") che è corretto.

Entrambi devono restituire un ISODate in base a the docs e a mio avviso dovrebbe agire in modo identico. Qualcuno sa perché non lo fa e se si tratti di un bug o di una funzionalità?

risposta

5

Internamente, new ISODate significa veramente:

Date.UTC(year, month, date, hour, min, sec, ms); 

IE, MongoDB divide la stringa in elementi con un'espressione regolare (linea 60 a https://github.com/mongodb/mongo/blob/master/src/mongo/shell/types.js#L56)

L'oggetto JavaScript Date ha un paio di inizializzatori differenti (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Syntax). Se si utilizza:

new Date("0001-01-01T:00:00:00"); 

Poi l'anno a quattro cifre 0001 non viene analizzato e interpretato, ma quando lo si utilizza come MongoDB fa:

Date.UTC(parseInt("0001")) 

regole Poi particolari si applicano per gli anni 00-99 si applicano . I documenti a https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Date_instances suggeriscono leggermente questo.

C'è già un ticket del server MongoDB allo https://jira.mongodb.org/browse/SERVER-8164, per favore votarlo.

+0

Grazie - hanno fatto. –