Krótka odpowiedź
Nie ma „uniwersalnej” dokumentacji, do której javascript mógłby się dostosować; każda przeglądarka z javascript jest naprawdę implementacją. Istnieje jednak standard, który jest zgodny z większością współczesnych przeglądarek, a jest to standard EMCAScript; standardowe ciągi znaków ECMAScript wymagałyby minimalnie zmodyfikowanej implementacji definicji ISO 8601.
Oprócz tego IETF przedstawia drugi standard , który są również stosowane przez przeglądarki, czyli definicję znaczników czasu wykonanych w RFC 2822. Rzeczywistą dokumentację można znaleźć na liście odnośników na dole.
Po tym można oczekiwać podstawowej funkcjonalności, ale to, co „powinno” być, nie jest z natury tym, co „jest”. Zagłębię się nieco w to proceduralnie, ponieważ wydaje się, że tylko trzy osoby faktycznie odpowiedziały na pytanie (Scott, goofballLogic i peller mianowicie), co, według mnie, sugeruje, że większość ludzi nie wie, co tak naprawdę się dzieje, gdy ty utwórz obiekt Date.
Długa odpowiedź
Gdzie jest dokumentacja zawierająca specyfikatory formatu obsługiwane przez obiekt Date ()?
Aby odpowiedzieć na pytanie lub zazwyczaj poszukać odpowiedzi na to pytanie, musisz wiedzieć, że javascript nie jest nowym językiem; w rzeczywistości jest to implementacja ECMAScript i jest zgodna ze standardami ECMAScript (ale uwaga, javascript również faktycznie był wcześniejszy niż te standardy; standardy EMCAScript są zbudowane na podstawie wczesnej implementacji LiveScript / JavaScript). Obecny standard ECMAScript to 5.1 (2011); w momencie, gdy pytanie zostało pierwotnie zadane (czerwiec 2009 r.), standardem było 3 (4 zostało porzucone), ale 5 zostało wydane wkrótce po stanowisku pod koniec 2009 r. Powinno to nakreślić jeden problem; jaki standard może stosować implementacja javascript, może nie odzwierciedlać tego, co faktycznie istnieje, ponieważ a) jest implementacją danego standardu, b) nie wszystkie implementacje standardu są purytanami,
Zasadniczo, mając do czynienia z javascript, masz do czynienia z pochodną (javascript specyficzną dla przeglądarki) implementacji (sam javascript). Na przykład Google V8 implementuje ECMAScript 5.0, ale JScript programu Internet Explorer nie próbuje być zgodny z żadnym standardem ECMAScript, ale Internet Explorer 9 jest zgodny z ECMAScript 5.0.
Gdy pojedynczy argument jest przekazywany do new Date (), rzutuje ten prototyp funkcji:
new Date(value)
Gdy dwa lub więcej argumentów zostanie przekazanych do new Date (), rzutuje ten prototyp funkcji:
new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
Obie te funkcje powinny wyglądać znajomo, ale nie odpowiada to od razu na twoje pytanie, a to, co określa się jako akceptowalny „format daty” wymaga dalszych wyjaśnień. Gdy przekażesz ciąg znaków do nowej daty (), wywoła on prototyp (zwróć uwagę, że używam słowa prototyp luźno; wersje mogą być pojedynczymi funkcjami lub mogą być częścią instrukcji warunkowej w jednej funkcji) dla nowa data (wartość) z ciągiem jako argumentem parametru „wartość”. Ta funkcja najpierw sprawdzi, czy jest to liczba, czy ciąg. Dokumentację tej funkcji można znaleźć tutaj:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
Na podstawie tego możemy wywnioskować, że aby zezwolić na formatowanie łańcucha dla nowej daty (wartości), musimy przyjrzeć się metodzie Date.parse (łańcuch). Dokumentację tej metody można znaleźć tutaj:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
Możemy ponadto wywnioskować, że spodziewane są daty w zmodyfikowanym rozszerzonym formacie ISO 8601, jak określono tutaj:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
Z doświadczenia możemy jednak rozpoznać, że obiekt Date javascript akceptuje inne formaty (wymuszone przez istnienie tego pytania w pierwszej kolejności), i jest to w porządku, ponieważ ECMAScript pozwala na formaty specyficzne dla implementacji. Jednak to wciąż nie odpowiada na pytanie, jaka dokumentacja jest dostępna w dostępnych formatach, ani jakie formaty są faktycznie dozwolone. Przyjrzymy się implementacji javascript Google, V8; Uwaga: nie sugeruję, że jest to „najlepszy” silnik javascript (w jaki sposób można zdefiniować „najlepszy”, a nawet „dobry”) i nie można zakładać, że formaty dozwolone w V8 reprezentują wszystkie dostępne obecnie formaty, ale myślę, że to uczciwe zakładać, że spełniają współczesne oczekiwania.
Google V8, date.js, DateConstructor
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
Patrząc na funkcję DateConstructor, możemy wywnioskować, że musimy znaleźć funkcję DateParse; należy jednak pamiętać, że „rok” nie jest faktycznym rokiem i jest jedynie odniesieniem do parametru „rok”.
Google V8, date.js, DateParse
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
To wywołuje% DateParseString, który w rzeczywistości jest referencją funkcji czasu wykonania dla funkcji C ++. Odnosi się do następującego kodu:
Google V8, runtime.cc,% DateParseString
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
Wywołanie funkcji, której dotyczy ta funkcja, dotyczy funkcji DateParser :: Parse (); zignoruj logikę otaczającą te wywołania funkcji, są to tylko kontrole zgodności z typem kodowania (ASCII i UC16). DateParser :: Parse jest zdefiniowany tutaj:
Google V8, dateparser-inl.h, DateParser :: Parse
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
Jest to funkcja, która faktycznie określa, jakie formaty akceptuje. Zasadniczo sprawdza zgodność ze standardem EMCAScript 5.0 ISO 8601, a jeśli nie jest zgodny ze standardami, podejmie próbę zbudowania daty na podstawie starszych formatów. Kilka kluczowych punktów na podstawie komentarzy:
- Słowa przed pierwszą liczbą, które są nieznane przez analizator składni, są ignorowane.
- Tekst w nawiasach jest ignorowany.
- Numery bez znaku, po których następuje „:”, są interpretowane jako „składnik czasu”.
- Numery bez znaku, po których następuje „.” są interpretowane jako „składnik czasu” i muszą następować milisekundy.
- Podpisane liczby, a następnie godzina lub minuta (np. +5: 15 lub +0515) są interpretowane jako strefa czasowa.
- Podczas deklarowania godziny i minuty możesz użyć „hh: mm” lub „hhmm”.
- Słowa wskazujące strefę czasową są interpretowane jako strefa czasowa.
- Wszystkie pozostałe liczby są interpretowane jako „składniki daty”.
- Wszystkie słowa zaczynające się od pierwszych trzech cyfr miesiąca są interpretowane jako miesiąc.
- Możesz zdefiniować minuty i godziny razem w jednym z dwóch formatów: „hh: mm” lub „hhmm”.
- Symbole takie jak „+”, „-” i niedopasowane „)” są niedozwolone po przetworzeniu liczby.
- Elementy pasujące do wielu formatów (np. 1970-01-01) są przetwarzane jako standardowy zgodny z normą EMCAScript 5.0 ciąg znaków ISO 8601.
To powinno wystarczyć, aby dać ci podstawowe pojęcie o tym, czego możesz się spodziewać, jeśli chodzi o przekazywanie ciągu znaków do obiektu Date. Możesz dalej rozwinąć tę kwestię, patrząc na następującą specyfikację, na którą wskazuje Mozilla w Mozilla Developer Network (zgodna ze znacznikami czasu IETF RFC 2822):
http://tools.ietf.org/html/rfc2822#page-14
Microsoft Developer Network dodatkowo wspomina o dodatkowym standardzie dla obiektu Date: ECMA-402, specyfikacji interfejsu API internacjonalizacji ECMAScript, która jest komplementarna do standardu ECMAScript 5.1 (i przyszłych). Można to znaleźć tutaj:
http://www.ecma-international.org/ecma-402/1.0/
W każdym razie powinno to pomóc w podkreśleniu, że nie ma „dokumentacji”, która uniwersalnie reprezentowałaby wszystkie implementacje javascript, ale wciąż dostępna jest wystarczająca ilość dokumentacji, aby rozsądnie zrozumieć, jakie ciągi znaków są dopuszczalne dla obiektu Date. Całkiem zadane pytanie, kiedy o tym pomyślisz, tak? : P
Bibliografia
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
http://tools.ietf.org/html/rfc2822#page-14
http://www.ecma-international.org/ecma-402/1.0/
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
Zasoby
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
http://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx