We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

Сводка

Метод 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' в этой спецификации.
Стандарт  

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

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Возможность 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,