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