2013-07-24 12 views
6

W MongoDB Shell na okna po uruchomieniu kwerendy o wartościDlaczego MongoDB shell nowy ISODate (0001-01-01) powraca data 1901-01-01

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

to rzeczywiście wydaje się szukać

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

Jeśli wpiszesz "nowy ISODate ('0001-01-01T00: 00: 00Z')" bezpośrednio w Mongo Shell widać tej konwersji odbywające jak zwraca ISODate ("1901-01-01T00: 00: 00Z ").

dziwne, gdy używasz "new Date" zamiast "nowego ISODate" wpisując:

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

powraca ISODate ("0001-01-01T00: 00: 00Z"), która jest poprawna.

Obie mają zwrócić ISODate zgodnie z the docs i moim zdaniem powinny działać identycznie. Czy ktoś wie, dlaczego nie ma i czy jest to błąd lub funkcja?

Odpowiedz

5

Wewnętrznie new ISODate naprawdę oznacza:

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

IE, MongoDB dzieli się ciąg na elementy z wyrażenia regularnego (linia 60 na https://github.com/mongodb/mongo/blob/master/src/mongo/shell/types.js#L56)

Kod JavaScript Data obiekt ma kilka różnych incjalizatory (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Syntax). Jeśli używasz:

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

Następnie rok czterocyfrowy 0001 nie jest analizowany i interpretowany, ale kiedy go używać jak MongoDB robi:

Date.UTC(parseInt("0001")) 

Następnie specjalne zasady stosuje się do lat 00-99 mają zastosowanie . Dokumenty o https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Date_instances delikatnie wskazują na to.

Istnieje bilet serwera MongoDB już pod numerem https://jira.mongodb.org/browse/SERVER-8164, proszę zagłosuj na niego.

+0

Dzięki - zrobiłem. –

Powiązane problemy