aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/global_objects/date/parse/index.html
blob: a83c917192e691051446ca33c59baa2064b4bd91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
---
title: Date.parse()
slug: Web/JavaScript/Reference/Global_Objects/Date/parse
tags:
  - Date
  - JavaScript
  - Довідка
  - метод
translation_of: Web/JavaScript/Reference/Global_Objects/Date/parse
---
<div>{{JSRef}}</div>

<p>Метод <strong><code>Date.parse()</code></strong> розбирає рядкове представлення дати та повертає кількість мілісекунд від 1 січня 1970 року, 00:00:00 за UTC, або <code>NaN</code>, якщо рядок неможливо розібрати чи, в окремих випадках, він містить недозволені значення (наприклад, 2015-02-31).</p>

<p>Не рекомендується використовувати <code>Date.parse</code>, оскільки у версіях до ES5 розбір був повністю залежним від реалізації. Досі існують багато відмінностей у тому, як різні хости розбирають рядки з датами, тому вони мають розбиратися вручну (можна скористатись бібліотекою, якщо очікується багато різних форматів).</p>

<div>{{EmbedInteractiveExample("pages/js/date-parse.html")}}</div>

<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</div>

<h2 id="Синтаксис">Синтаксис</h2>

<p>Прямий виклик:</p>

<pre class="syntaxbox notranslate">Date.parse(<var>dateString</var>)
</pre>

<p>Неявний виклик:</p>

<pre class="syntaxbox notranslate">new Date(<var>dateString</var>)
</pre>

<h3 id="Параметри">Параметри</h3>

<dl>
 <dt><code><var>dateString</var></code></dt>
 <dd>Рядок, що відображає <a href="#Date_Time_String_Format">спрощену версію розширеного календарного формату дати ISO 8601</a>. (Можна використовувати й інші формати, але результат залежитиме від реалізації.)</dd>
</dl>

<h3 id="Повертає">Повертає</h3>

<p>Число, що відображає кількість мілісекунд від 1 січня 1970 року, 00:00:00 за UTC, і дату, отриману розбором наданого рядкового представлення дати. Якщо аргумент не відображає дозволене значення дати, повертається {{jsxref("NaN")}}.</p>

<h2 id="Опис">Опис</h2>

<p>Метод <code>parse()</code> приймає рядок з датою (наприклад, "<code>2011-10-10T14:48:00</code>") та повертає число мілісекунд від 1 січня 1970 року, 00:00:00 за UTC.</p>

<p>Ця функція корисна для присвоєння дати на основі рядкових значень, наприклад, у поєднанні з методом {{jsxref("Date.prototype.setTime()", "setTime()")}} та об'єктом {{jsxref("Global_Objects/Date", "Date")}}.</p>

<h3 id="Рядковий_формат_дати_та_часу">Рядковий формат дати та часу</h3>

<p>Стандартне рядкове представлення дати та часу є спрощенням розширеного календарного формату дати ISO 8601. (Дивіться більше подробиць у розділі <a href="https://tc39.github.io/ecma262/#sec-date-time-string-format">Date Time String Format</a> специфікації ECMAScript.)</p>

<p>Наприклад, "<code>2011-10-10</code>" (<em>лише дата</em>), "<code>2011-10-10T14:48:00</code>" (<em>дата та час</em>) або "<code>2011-10-10T14:48:00.000+09:00</code>" (<em>дата та час</em> з мілісекундами та часовим поясом) можуть бути та будуть розібрані. Коли зсув часового поясу відсутній, форми, що містять лише дату, інтерпретуються як час UTC, а форми з датою та часом інтерпретуються як місцевий час.</p>

<p>Хоча специфікатори часового поясу використовуються під час розбору рядків для інтерпретації аргументу, значення, що повертається, завжди буде кількістю мілісекунд між 1 січня 1970 року 00:00:00 за UTC та точкою у часі, відображеною аргументом, або ж <code>NaN</code>.</p>

<p>Оскіьки <code>parse()</code> - статичний метод {{jsxref("Date")}}, він викликається як <code>Date.parse()</code>, а не як метод екземпляра {{jsxref("Date")}}.</p>

<h3 id="Використання_специфічних_реалізацій_форматів_дати">Використання специфічних реалізацій форматів дати</h3>

<div class="blockIndicator note">
<p>Цей розділ містить специфічно реалізовану поведінку, яка може не співпадати між різними реалізаціями.</p>
</div>

<p>Специфікація ECMAScript зазначає: Якщо рядок не відповідає стандартному формату, функція може застосовувати будь-яку специфічно реалізовану евристику чи специфічно реалізований алгоритм розбору. Рядки, які неможливо розібрати, чи дати, що містять недозволені значення елементів у рядках формату ISO, змусять метод <code>Date.parse()</code> повернути {{jsxref("NaN")}}.</p>

<p>Однак, недозволені значення у рядках дат, які не розпізнаються в якості спрощеного формату ISO, визначеного у ECMA-262, можуть повернути або не повернути {{jsxref("NaN")}}, в залежності від переглядача, наданих значень і т.д.:</p>

<pre class="brush: js notranslate">// Рядок не формату ISO з недозволеними значеннями у даті
new Date('23/25/2014');
</pre>

<p>це буде сприйнято як локальна дата 25 листопада 2015 у Firefox 30 та як неправильна дата у Safari 7.</p>

<p>Однак, якщо рядок розпізнається як рядок формату ISO та містить недозволені значення, він поверне {{jsxref("NaN")}} в усіх переглядачах, сумісних з ES5 та пізнішими версіями:</p>

<pre class="brush: js notranslate">// Рядок ISO з недозволеними значеннями
new Date('2014-25-23').toISOString();
// викидає "RangeError: invalid date" в усіх переглядачах, сумісних з ES5
</pre>

<p>Специфічну реалізацію SpiderMonkey можна знайти у <a href="https://dxr.mozilla.org/mozilla-central/source/js/src/jsdate.cpp?rev=64553c483cd1#889"><code>jsdate.cpp</code></a>. Рядок "<code>10 06 2014</code>" є прикладом невідповідності формату ISO, і тому використовується особливий алгоритм. Дивіться також цей <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1023155#c6">короткий опис</a> того, як працює розбір.</p>

<pre class="brush: js notranslate">new Date('10 06 2014');
</pre>

<p>це буде сприйматись як локальна дата 6 жовтня 2014, а не як 10 червня 2014.</p>

<p>Інші приклади:</p>

<pre class="brush: js notranslate">new Date('foo-bar 2014').toString();
// повертає: "Invalid Date"

Date.parse('foo-bar 2014');
// повертає: NaN
</pre>

<h3 id="Відмінності_у_отриманому_часовому_поясі">Відмінності у отриманому часовому поясі</h3>

<div class="blockIndicator note">
<p>Цей розділ містить специфічно реалізовану поведінку, яка може не співпадати між різними реалізаціями.</p>
</div>

<p>Отримавши нестандартний рядок дати "<code>March 7, 2014</code>", <code>parse()</code> припускає, що він відноситься до місцевого часового поясу, але отримавши рядок у спрощеній версії розширеного календарного формату ISO 8601, наприклад, "<code>2014-03-07</code>", він припускає часовий пояс UTC (ES5 та ECMAScript 2015). Таким чином, об'єкти {{jsxref("Date")}}, отримані за допомогою цих рядків, можуть відображати різні моменти часу, в залежності від версії ECMAScript, яка підтримується, якщо тільки у системі не встановлений місцевий часовий пояс UTC. Це означає, що два рядки дат, що виглядають еквівалентними, можуть повернути два різних значення, в залежності від формату рядка, який перетворюється.</p>

<h2 id="Приклади">Приклади</h2>

<h3 id="Використання_Date.parse">Використання <code>Date.parse()</code></h3>

<p>Усі наступні виклики повертають <code>1546300800000</code>. Перший, у відповідності до ES5, застосує час UTC, а інші вказують часовий пояс UTC через специфікацію дати ISO (<code>Z</code> та <code>+00:00</code>)</p>

<pre class="brush: js notranslate">Date.parse("2019-01-01")
Date.parse("2019-01-01T00:00:00.000Z")
Date.parse("2019-01-01T00:00:00.000+00:00")
</pre>

<p>Наступний виклик, який не вказує часовий пояс, поверне 2019-01-01 о 00:00:00 у локальному часовому поясі системи.</p>

<pre class="brush: js notranslate">Date.parse("2019-01-01T00:00:00")
</pre>

<h3 id="Нестандартні_рядки_дат">Нестандартні рядки дат</h3>

<div class="blockIndicator note">
<p>Цей розділ містить специфічно реалізовану поведінку, яка може не співпадати між різними реалізаціями.</p>
</div>

<p>Якщо <code>IPOdate</code> є існуючим об'єктом {{jsxref("Date")}}, йому можна призначити дату 9 серпня 1995 (за локальним часом) наступним чином:</p>

<pre class="brush: js notranslate">IPOdate.setTime(Date.parse('Aug 9, 1995'));
</pre>

<p>Ще кілька прикладів розбору нестандартних рядків дат:</p>

<pre class="brush: js notranslate">Date.parse('Aug 9, 1995');
</pre>

<p>Повертає <code>807937200000</code> у часовому поясі GMT-0300 та інші значення у інших часових поясах, оскільки рядок не вказує часовий пояс і не відповідає формату ISO, тому часовий пояс береться локальний.</p>

<pre class="brush: js notranslate">Date.parse('Wed, 09 Aug 1995 00:00:00 GMT');
</pre>

<p>Повертає <code>807926400000</code>, незалежно від локального часового поясу, оскільки вказано GMT (UTC).</p>

<pre class="brush: js notranslate">Date.parse('Wed, 09 Aug 1995 00:00:00');
</pre>

<p>Повертає <code>807937200000</code> у часовому поясі GMT-0300 та інші значення у інших часових поясах, оскільки аргумент не містить вказівника часового поясу, і не відповідає формату ISO, а отже, сприймається як локальний.</p>

<pre class="brush: js notranslate">Date.parse('Thu, 01 Jan 1970 00:00:00 GMT');
</pre>

<p>Повертає <code>0</code>, незалежно від локального часового поясу, оскільки вказано GMT (UTC).</p>

<pre class="brush: js notranslate">Date.parse('Thu, 01 Jan 1970 00:00:00');
</pre>

<p>Повертає <code>14400000</code> у часовому поясі GMT-0400 та інші значення у інших часових поясах, оскільки часовий пояс не вказано, а рядок не відповідає формату ISO, тому використовується локальний часовий пояс.</p>

<pre class="brush: js notranslate">Date.parse('Thu, 01 Jan 1970 00:00:00 GMT-0400');
</pre>

<p>Повертає <code>14400000</code>, незалежно від локального часового поясу, оскільки вказано GMT (UTC).</p>

<h2 id="Специфікації">Специфікації</h2>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">Специфікація</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-date.parse', 'Date.parse')}}</td>
  </tr>
 </tbody>
</table>

<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2>



<p>{{Compat("javascript.builtins.Date.parse")}}</p>

<h3 id="Примітки_щодо_сумісності">Примітки щодо сумісності</h3>

<ul>
 <li>Firefox 49 змінив розбір 2-значних значень року для співпадіння з переглядачем Google Chrome замість Internet Explorer. Тепер 2-значні значення року, менші за <code>50</code>, розбираються як роки 21-го сторіччя. Наприклад, <code>04/16/17</code>, що раніше інтерпретувалось як 16 квітня 1917 року тепер буде 16 квітня 2017 року. Щоб запобігти будь-яких проблем сумісності чи невизначеності, рекомендується використовувати формат ISO 8601, наприклад, "<code>2017-04-16</code>" (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1265136">помилка 1265136</a>).</li>
 <li>Google Chrome прийме числовий рядок як дозволений параметр <code><em>dateString</em></code>. Це означає, що, наприклад, в той час, як команда <code>!!Date.parse("42")</code> повертає <code>false</code> у Firefox, вона поверне <code>true</code> у Google Chrome, оскільки "<code>42</code>" інтерпретується як 1 січня 2042 року.</li>
</ul>

<h2 id="Див._також">Див. також</h2>

<ul>
 <li>{{jsxref("Date.UTC()")}}</li>
</ul>