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.

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

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

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

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

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

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

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


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


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


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


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


```js
new Date("10 06 2014");
```


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


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

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

Примеры
-------

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

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


```js
IPOdate.setTime(Date.parse("Aug 9, 1995"));
```


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


```js
Date.parse("Aug 9, 1995");
```


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


```js
Date.parse("Wed, 09 Aug 1995 00:00:00 GMT");
```


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


```js
Date.parse("Wed, 09 Aug 1995 00:00:00");
```


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


```js
Date.parse("Thu, 01 Jan 1970 00:00:00 GMT");
```


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


```js
Date.parse("Thu, 01 Jan 1970 00:00:00");
```


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


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


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

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-date.parse |

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* `Date.UTC()`