Короткий відповідь
Не існує "універсальної" документації, якою підтримує javascript; кожен браузер, який має JavaScript, справді є реалізацією. Однак існує стандарт, якого прагнуть дотримуватися більшість сучасних браузерів, і це стандарт EMCAScript; стандартні рядки ECMAScript брали б, як мінімум, модифіковану реалізацію визначення ISO 8601.
На додаток до цього, існує другий стандарт, запропонований IETF, який браузери, як правило, дотримуються, і це визначення часових позначок, внесених у RFC 2822. Фактичну документацію можна знайти у списку посилань у нижній частині.
Від цього можна очікувати базової функціональності, але те, що «повинно бути», по суті не є тим, що є. Я збираюся трохи поглибитись із цим процедурним шляхом, хоча, як видається, лише троє людей насправді відповіли на питання (Скотт, goofballLogic та пеллер, а саме), що, на мою думку, більшість людей не знає, що насправді відбувається, коли ти створити об’єкт Дата.
Довга відповідь
Де знаходиться документація, в якій перераховані специфікатори формату, підтримувані об'єктом Date ()?
Щоб відповісти на запитання або, як правило, навіть шукати відповідь на це питання, вам потрібно знати, що javascript - це не нова мова; це насправді реалізація ECMAScript і відповідає стандартам ECMAScript (але зауважте, що JavaScript також фактично попередньо датовані цими стандартами; стандарти EMCAScript будуються за рахунок ранньої реалізації LiveScript / JavaScript). Поточний стандарт ECMAScript становить 5.1 (2011); на той момент, коли питання було задано спочатку (червень 09), стандарт був 3 (4 було відмовлено), але 5 було випущено незабаром після публікації в кінці 2009 року. Це повинно окреслити одну проблему; те, за яким стандартом може слідувати реалізація javascript, може не відображати те, що насправді існує, оскільки а) це реалізація заданого стандарту; б) не всі реалізації стандарту є пуританськими,
По суті, маючи справу з javascript, ви маєте справу з похідною (JavaScript, специфічною для браузера) реалізації (сам JavaScript). Наприклад, V8 Google реалізує ECMAScript 5.0, але JScript Internet Explorer не намагається відповідати жодному стандарту ECMAScript, але Internet Explorer 9 відповідає стандарту ECMAScript 5.0.
Коли один аргумент передається новій даті (), він передає цей прототип функції:
new Date(value)
Коли два чи більше аргументів передаються до нової дати (), він передає цей прототип функції:
new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )
Обидві ці функції повинні виглядати знайомими, але це не одразу дає відповідь на ваше запитання, а те, що кількісно визначається як прийнятний «формат дати», потребує подальшого пояснення. Коли ви передаєте рядок до нової дати (), він зателефонує до прототипу (зауважте, що я дуже просто використовую слово прототип ; версії можуть бути окремими функціями, або це може бути частиною умовного твердження в одній функції) для нова дата (значення) з рядком як аргумент для параметра "значення". Ця функція спочатку перевірить, чи це число чи рядок. Документацію для цієї функції можна знайти тут:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2
З цього ми можемо зробити висновок, що для отримання форматування рядків, дозволеного для нової дати (значення), ми повинні переглянути метод Date.parse (рядок). Документацію щодо цього методу можна знайти тут:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2
Ми можемо також зробити висновок, що дати очікуються у модифікованому розширеному форматі ISO 8601, як зазначено тут:
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
Однак з досвіду ми можемо визнати, що об’єкт Date javascript приймає інші формати (нав'язується в першу чергу наявністю цього питання), і це нормально, оскільки ECMAScript дозволяє реалізувати конкретні формати. Однак це все ще не відповідає на питання, яка документація доступна у наявних форматах, а також які формати фактично дозволені. Ми розглянемо реалізацію JavaScript у V8; Зверніть увагу, я не припускаю, що це "найкращий" механізм javascript (як можна визначити "найкращий" або навіть "хороший"), і не можна вважати, що формати, дозволені у V8, представляють усі наявні сьогодні формати, але я думаю, що це справедливо припустити, що вони відповідають сучасним очікуванням.
V8 від Google, date.js, DateConstructor
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141
Переглядаючи функцію DateConstructor, ми можемо зробити висновок, що нам потрібно знайти функцію DateParse; однак зауважте, що "рік" не є фактичним роком і є лише посиланням на параметр "рік".
V8 Google, date.js, DateParse
https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270
Це викликає% DateParseString, що є фактично посиланням функції на час виконання функції C ++. Він посилається на такий код:
V8 від Google, runtime.cc,% DateParseString
https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559
Виклик функції, про який ми маємо справу в цій функції, призначений для DateParser :: Parse (); ігноруйте логіку навколо цих викликів функцій, це лише перевірки на відповідність типу кодування (ASCII та UC16). DateParser :: Аналіз визначається тут:
V8 Google, dateparser-inl.h, DateParser :: Синтаксичний аналіз
https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36
Це функція, яка фактично визначає, які формати вона приймає. По суті, він перевіряє відповідність стандарту EMCAScript 5.0 ISO 8601, і якщо він не відповідає стандартам, він намагатиметься створити дату на основі застарілих форматів. На основі коментарів:
- Слова перед першим числом, невідомим аналізатору, ігноруються.
- Текст з урахуванням думки ігнорується.
- Непідписані числа, за якими слідує ":", інтерпретуються як "компонент часу".
- Непідписані цифри, а потім "." інтерпретуються як "часова складова", і за ними слід слідувати мілісекундами.
- Підписані цифри, що супроводжуються година або година хвилини (наприклад, +5: 15 або +0515), інтерпретуються як часовий пояс.
- Декларуючи годину і хвилину, ви можете використовувати "hh: mm" або "hhmm".
- Слова, що позначають часовий пояс, інтерпретуються як часовий пояс.
- Всі інші номери інтерпретуються як "компоненти дати".
- Усі слова, які починаються з перших трьох цифр місяця, трактуються як місяць.
- Ви можете визначити хвилини та години разом у будь-якому з двох форматів: "hh: mm" або "hhmm".
- Символи на зразок "+", "-" і не збігаються ")" не дозволяються після обробки номера.
- Елементи, які відповідають декільком форматам (наприклад, 1970-01-01), обробляються як стандарт, сумісний із рядком EMCAScript 5.0 ISO 8601.
Тож цього має бути достатньо, щоб дати вам основне уявлення про те, чого очікувати, якщо мова йде про передачу рядка в об’єкт Date. Ви можете додатково розширити це, переглянувши таку специфікацію, на яку Mozilla вказує в Мережі розробників Mozilla (відповідно до часових позначок IETF RFC 2822):
http://tools.ietf.org/html/rfc2822#page-14
Мережа розробників Microsoft додатково згадує додатковий стандарт для об’єкта Date: ECMA-402, специфікація API інтернаціоналізації ECMAScript, що є доповненням до стандарту ECMAScript 5.1 (та майбутніх). Це можна знайти тут:
http://www.ecma-international.org/ecma-402/1.0/
У будь-якому випадку, це повинно допомогти підкреслити, що не існує "документації", яка б універсально представляла всі реалізації JavaScript, але є ще достатня кількість документації, щоб зрозуміти, які рядки прийнятні для об'єкта Date. Досить завантажене питання, коли ви думаєте про це, так? : P
Список літератури
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
Ресурси
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