Date.parse()

Сводка

Метод Date.parse() разбирает строковое представление даты и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.

Синтаксис

Прямой вызов:

Date.parse(dateString)

Неявный вызов:

new Date(dateString)

Параметры

dateString
Строковое представление даты из RFC2822 (на английском, на русском) или ISO 8601. Могут использоваться и другие форматы, но результаты в таком случае будут непредсказуемые.

Описание

Метод parse() принимает строку с датой (например, "Dec 25, 1995") и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC. Этот метод полезен для установки значения даты из строкового значения, например, в сочетании с методом setTime() о объектом Date.

По данному строковому представлению времени метод parse() возвращает значение времени. Он принимает синтаксис даты из RFC2822 / IETF (RFC2822 раздел 3.3 — на английском, на русском), например, "Mon, 25 Dec 1995 13:30:00 GMT". Он понимает аббревиатуры континентальных часовых поясов США, но для общего пользования используйте смещение часовых поясов, например, "Mon, 25 Dec 1995 13:30:00 +0430" (4 часа 30 минут к востоку от Гринвичского меридиана). Если часовой пояс не определён и строка является форматом ISO, распозначаемым ES5, предполагается, что часовым поясом является UTC. GMT и UTC считаются эквивалентными. Местный часовой пояс используется для интерпретации аргумента в формате RFC2822 из раздела 3.3 (на английском, на русском) (или в любом другом формате, не распознаваемым как ISO 8601 в ES5), если он не содержит информации о часовом поясе.

Поддержка формата ISO-8601 в ECMAScript 5

Строка с датой и временем может быть в формате ISO 8601. Например, могут быть переданы и разобраны строки "2011-10-10" (только дата) или "2011-10-10T14:48:00" (дата и время). Для интерпретации аргументов в формате ISO 8601, не содержащих информацию о часовом поясе, используется часовой пояс UTC (обратите внимание, что в черновике ECMAScript 6-го издания такие дата и время трактуются как местное время, а не время по UTC).

Хотя во время разбора строки с датой и используется спецификатор часового пояса, возвращаемое значение всегда содержит количество миллисекунд между 1 января 1970 года 00:00:00 по UTC и моментом времени, представленым аргументом.

Поскольку метод parse() является статическим методом объекта Date, вы всегда должны использовать его как Date.parse().

Различия в предполагаемом часовом поясе

Для строки даты "March 7, 2014", метод parse() будет предполагать местный часовой пояс, но если строка дана в формате ISO, например "2014-03-07", он будет предполагать, что часовой пояс равен UTC. Поэтому объекты Date, созданные из этих строк, если в системе местный часовой пояс не равен UTC, будут представлять разные моменты времени. Это значит, что две строки с датами, которые выглядят одинаковыми, могут дать два разных значения в зависимости от формата преобразуемой строки (это поведение изменено в ECMAScript 6-го издания таким образом, что оба случая будут рассматривать дату в местном часовом поясе).

Откат к зависимым от реализации форматам даты

В спецификации ECMAScript говорится: если строка не соответствует стандартному формату, функция может откатиться к любой зависимой от реализации эвристике, либо к зависимому от реализции алгоритму разбора. Нераспознанные строки, либо даты, содержащие недопустимые значения элементов в строках формата ISO, должны при вызове Date.parse() возвращать NaN.

Однако, недопустимые значения в строке даты, не распознанные как формат ISO, как определено ES5 могут возвращать, а могут и не возвращать NaN в качестве результата, в зависимости от браузера и предоставленных значений, например:

// Строка не в формате ISO с недопустимыми значениями даты
new Date('23/25/2014');

будет рассматриваться как местная дата 25 ноября 2015 года в Firefox 30 и как недопустимая дата в Safari 7. Однако, если строка распознана как строка в формате ISO и она содержит недопустимые значения, метод вернёт NaN во всех браузерах, совместимых с ES5:

// Строка в формате ISO с недопустимыми значениями даты
new Date('2014-25-23').toISOString();
// вернёт "RangeError: invalid date" во всех браузерах, совместимых с ES5

Реализация эвристики SpiderMonkey может быть найдена в файле jsdate.cpp. Строка "10 06 2014" является примером не подходящей под формат ISO и поэтому её разбор откатывается на пользовательскую подпрограмму. Так же смотрите эту грубую схему работы разбора строки.

new Date('10 06 2014');

будет рассматриваться как местная дата 6 октября 2014 года, а не 10 июня 2014 года. Другие примеры:

new Date('foo-bar 2014').toString();
// вернёт: "Invalid Date"

Date.parse('foo-bar 2014');
// вернёт: NaN

Примеры

Пример: использование метода Date.parse()

Если переменная IPOdate содержит существующий объект Date, она может быть установлена в 9 августа 1995 года (по местному времени) следующим способом:

IPOdate.setTime(Date.parse('Aug 9, 1995'));

Ещё несколько примеров разбора нестандартных строк с датами:

Date.parse('Aug 9, 1995');

Вернёт 807937200000 в часовом поясе GMT-0300, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то часовой пояс по умолчанию равен местному часовому поясу.

Date.parse('Wed, 09 Aug 1995 00:00:00 GMT');

Вернёт 807926400000 вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).

Date.parse('Wed, 09 Aug 1995 00:00:00');

Вернёт 807937200000 в часовом поясе GMT-0300, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то часовой пояс по умолчанию равен местному часовому поясу.

Date.parse('Thu, 01 Jan 1970 00:00:00 GMT');

Вернёт 0 вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).

Date.parse('Thu, 01 Jan 1970 00:00:00');

Вернёт 14400000 в часовом поясе GMT-0400, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то используется местный часовой пояс.

Date.parse('Thu, 01 Jan 1970 00:00:00 GMT-0400');

Вернёт 14400000 вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).

Спецификации

Спецификация Статус Комментарии
ECMAScript 1-е издание. Стандарт Изначальное определение. Реализована в JavaScript 1.0.
ECMAScript 5.1 (ECMA-262)
Определение 'Date.parse' в этой спецификации.
Стандарт Добавлен формат ISO 8601.
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Date.parse' в этой спецификации.
Стандарт  

Совместимость с браузерами

Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка (Да) (Да) (Да) (Да) (Да)
Формат ISO 8601 (Да) 4.0 (2.0) 9 (Да) (Да)
Возможность Android Chrome для Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка ? (Да) (Да) ? ? ?
Формат ISO 8601 ? (Да) (Да) ? (Да) (Да)

Смотрите также

Метки документа и участники

 Внесли вклад в эту страницу: Mingun
 Обновлялась последний раз: Mingun,