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
|
---
title: Date.parse()
slug: Web/JavaScript/Reference/Global_Objects/Date/parse
tags:
- Date
- JavaScript
- Method
- Reference
translation_of: Web/JavaScript/Reference/Global_Objects/Date/parse
---
<div>{{JSRef}}</div>
<p>Die <strong><code>Date.parse()</code></strong> Methode liest eine String-Repräsentation eines Datums ein und gibt die Anzahl der Millisekunden seit dem 1. Januar 1970 00:00:00 UTC oder <code>NaN</code>, wenn der String kein Datum ist oder manchmal wenn einige Datums- oder Zeitwerte einen falschen Wert haben (z. B. 2015-02-31), zurück.</p>
<p>Es ist bis ES5 nicht empfohlen die <code>Date.parse</code> Methode einzusetzten, weil das Einlesen von Strings implementierungsabhängig war. Es gibt sehr viele Unterschiede wie verschiedene Implementierungen strings einlesen, weshalb Strings manuell eingelesen werden sollten (eine Bibliothek kann helfen, wenn viele Formate eingesetzt werden sollen).</p>
<div>{{EmbedInteractiveExample("pages/js/date-parse.html")}}</div>
<h2 id="Syntax">Syntax</h2>
<p>Direkter Aufruf:</p>
<pre class="syntaxbox">Date.parse(<var>dateString</var>)</pre>
<p>Impliziter Aufruf:</p>
<pre class="syntaxbox">new Date(<var>dateString</var>)</pre>
<h3 id="Parameter">Parameter</h3>
<dl>
<dt><code>dateString</code></dt>
<dd>Ein String, der ein <a href="http://tools.ietf.org/html/rfc2822#section-3.3">RFC2822</a> oder (eine Variante des) ISO 8601 Datumsformat (mit Zeit) repräsentiert (andere Formate können manchmal eingesetzt werden, jedoch ist das Ergebnis manchmal unerwartet).</dd>
</dl>
<h3 id="Rückgabewert">Rückgabewert</h3>
<p>Eine Zahl, die die Millisekunden zwischen dem 1. Januar 1970 00:00:00 UTC und dem Datum, das in dem übergebenen Parameter repräsentiert wird. Wenn der Parameter kein valides Datum repräsentiert, wird {{jsxref("NaN")}} zurückgegeben.</p>
<h2 id="Beschreibung">Beschreibung</h2>
<p>Die <code>parse()</code> Methode bekommt ein Datumsstring (z. B. <code>"Dec 25, 1995"</code> ) und gibt die Anzahl der Millisekunden seit dem 1. Januar 1970 00:00:00 UTC zurück. Diese Funktion ist nützlich, um Datumswerte mithilfe eines Stringswertes einzustellen, (z. B. im zusammenhang mit der {{jsxref("Date.prototype.setTime()", "setTime()")}} Methode und dem {{jsxref("Global_Objects/Date", "Date")}} Objekt).</p>
<p>Bei einer Stringrepräsentation mit einer Zeit, gibt die <code>parse()</code> Methode die Zeitwert zurück. Es wird die RFC2822 / IETF Datums Syntax (<a href="http://tools.ietf.org/html/rfc2822#section-3.3">RFC2822 Section 3.3</a>) unterstützt (z. B. <code>"Mon, 25 Dec 1995 13:30:00 GMT"</code>). Die Methode versteht die kontimentalen US Zeitzonenabkürzungen, jedoch sollte lieber der Zeitzonenunterschied angegeben werden, wie zum Beispiel <code>"Mon, 25 Dec 1995 13:30:00 +0430"</code> (4 Stunden und 30 Minuten östlich vom Greenwich Meridian).</p>
<p>GMT und UTC werden gleich berücksichtigt. Die lokale Zeitzone wird eingesetzt um Argumente im <a href="http://tools.ietf.org/html/rfc2822#section-3.3">RFC2822 Kapitel 3.3</a> Format zu interpretieren, welche keine Zeitzoneninformationen enthalten.</p>
<p>Wegen der Unterschiede beim einlesen von Datums Strings, ist es empfohlen das Einlesen eines Datums immer manuell durchzuführen, wenn das Ergebnisse inkonsistent sind, besonders über verschiedene ECMAScript Implementierungen hinweg, wo Strings wie <code>"2015-10-12 12:00:00"</code> manchmal zu <code>NaN</code>, UTC oder lokaler Zeitzone eingelesen werden.</p>
<h3 id="ECMAScript_5_ISO-8601_Format_Unterstützung">ECMAScript 5 ISO-8601 Format Unterstützung</h3>
<p>Der Datums- / Zeit-String ist manchmal im einfachen <a href="http://www.w3.org/TR/NOTE-datetime">ISO 8601</a> Format. Zum Beispiel können <code>"2011-10-10"</code> (nur ein Datum) oder <code>"2011-10-10T14:48:00"</code> (Datum und Zeit) übergeben und eingelesen werden. Wenn der String ein ISO 8601 Datum (ohne Zeit) ist, wird die UTC Zeitzone eingesetzt, um die Argumente zu interpretieren. Wenn der String Datums- und Zeitangaben im <a href="http://www.w3.org/TR/NOTE-datetime">ISO 8601</a> Format enthällt, wird dieses als lokale Zeit interpretiert.</p>
<p>Weil Zeitzonen im String enthalten sein können und interpretiert werden können, wird immer die Anzahl der Millisekunden zwischen dem repräsentierten Datum und dem 1. Januar 1970 00:00:00 UTC oder <code>NaN</code> zurückgegeben.</p>
<p>Weil <code>parse()</code> eine statische Methode von {{jsxref("Date")}} ist, wird diese mit <code>Date.parse()</code> aufgerufen und nicht als Methode einer {{jsxref("Date")}} Instanz.</p>
<h3 id="Unterschiede_in_erwarteten_Zeitzonen">Unterschiede in erwarteten Zeitzonen</h3>
<p>Wenn der Datumsstring <code>"March 7, 2014"</code> gegeben ist, nimmt <code>parse()</code> dabei die lokale Zeitzone an. Ist hingegen ein ISO Format wie <code>"2014-03-07"</code> angegeben, so wird eine UTC Zeitzone angenommen (ES5 und ECMAScript 2015). Deshalb können die so erstellten {{jsxref("Date")}} Objekte einen unterschiedlichen Zeitpunkt repräsentieren. Dieses ist von der ECMAScript Version abhängig wenn das System mit einer lokalen UTC Zeit eingestellt ist. Das bedeutet, dass zwei Strings mit einem äquivalenten Datum (Unterschied in der Formatierung) zu zwei verschiednenen Ergebnissen führen kann.</p>
<h3 id="Fall-back_für_implementierungsspezifische_Datumsformate">Fall-back für implementierungsspezifische Datumsformate</h3>
<p>Die ECMAScript Spezifikation besagt: Wenn ein String nicht dem Standardformat entspricht, nutzen die Funktionen eine Fall-back-Lösung in Form einer implementierungsabhängigen Heuristik oder eines implementierungsabhängigen Algorithmus. Unkenntliche Strings oder Daten, die nicht valide Werte von ISO formattierten Elementen haben, führen dazu, dass <code>Date.parse()</code> den Wert {{jsxref("NaN")}} zurückgibt.</p>
<p>Immer, wenn ein String nicht im einfachen ISO Format ist (ECMA-252) und nicht valide Datumswerte enthällt, ist es vom Wert und vom Browser abhängig, ob {{jsxref("NaN")}} zurückgegeben wird oder nicht. Z. B.:</p>
<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="comment token">// Kein-ISO String: Mit nicht validen Datumswerten</span>
<span class="keyword token">new</span> <span class="class-name token">Date</span><span class="punctuation token">(</span><span class="string token">'23/25/2014'</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
<p>Führt zu den Datum 25. November 2015 (Ortszeit) in Firefox 30 und zu einem nicht validen Datum in Safari 7. Immer, wenn Strings als ISO Format erkannt werden und diese nicht valider Werte enthalten, wird von allen Browsern, die mindestens ES5 unterstützen, {{jsxref("NaN")}} zurückgegeben:</p>
<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="comment token">// ISO String mit nicht validen Werten</span>
<span class="keyword token">new</span> <span class="class-name token">Date</span><span class="punctuation token">(</span><span class="string token">'2014-25-23'</span><span class="punctuation token">)</span><span class="punctuation token">.</span><span class="function token">toISOString</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="comment token">// returns "RangeError: invalid date" in allen es5 kompatiblen Browsern</span></code></pre>
<p>SpiderMonkey's implementierungsabhängige Heuristik kann in der <a href="http://mxr.mozilla.org/mozilla-central/source/js/src/jsdate.cpp?rev=64553c483cd1#889"><code>jsdate.cpp</code></a>-Datei gefunden werden. Der String <code>"10 06 2014"</code> ist ein Beispiel für einen nicht konformen ISO formatierten String und dieses wird durch die implementierungsabhängige Heuristik abgearbeitet. Siehe zudem diese <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1023155#c6">grobe Übersicht</a> an, wie das Analysieren funktioniert.</p>
<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">new</span> <span class="class-name token">Date</span><span class="punctuation token">(</span><span class="string token">'10 06 2014'</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
<p>Wird das Datum 6. Oktober 2014 (Ortszeit) erzeugen und nicht den 10 Juni 2014. Andere Beispiele:</p>
<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">new</span> <span class="class-name token">Date</span><span class="punctuation token">(</span><span class="string token">'foo-bar 2014'</span><span class="punctuation token">)</span><span class="punctuation token">.</span><span class="function token">toString</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="comment token">// returns: "Invalid Date"</span>
Date<span class="punctuation token">.</span><span class="function token">parse</span><span class="punctuation token">(</span><span class="string token">'foo-bar 2014'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="comment token">// returns: NaN</span></code></pre>
<h2 id="Beispiele">Beispiele</h2>
<h3 id="Einsatz_von_Date.parse()">Einsatz von <code>Date.parse()</code></h3>
<p>Wenn <code>IPOdate</code> ein existierendes {{jsxref("Date")}} Objekt ist, kann es auf den 9. August 1995 (Ortszeit) gesetzt werden:</p>
<pre class="brush: js line-numbers language-js"><code class="language-js">IPOdate<span class="punctuation token">.</span><span class="function token">setTime</span><span class="punctuation token">(</span>Date<span class="punctuation token">.</span><span class="function token">parse</span><span class="punctuation token">(</span><span class="string token">'Aug 9, 1995'</span><span class="punctuation token">)</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
<p>Das gleich Beispiel für das Analysieren von nicht-Standarddatumsstrings:</p>
<pre class="brush: js line-numbers language-js"><code class="language-js">Date<span class="punctuation token">.</span><span class="function token">parse</span><span class="punctuation token">(</span><span class="string token">'Aug 9, 1995'</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
<p>Gibt den Wert <code>807937200000</code> in der Zeitzone GMT-0300 zurück und andere Werte in anderen Zeitzonen, wenn im String keine Zeitzone definiert ist und es kein ISO formatiertes Datum ist. Deswegen wird als Standardwert die Ortszeit genutzt.</p>
<pre class="brush: js line-numbers language-js"><code class="language-js">Date<span class="punctuation token">.</span><span class="function token">parse</span><span class="punctuation token">(</span><span class="string token">'Wed, 09 Aug 1995 00:00:00 GMT'</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
<p>Gibt <code>807926400000</code> in allen Zeitzonen zurück, weil GMT (UTC) angegeben ist.</p>
<pre class="brush: js line-numbers language-js"><code class="language-js">Date<span class="punctuation token">.</span><span class="function token">parse</span><span class="punctuation token">(</span><span class="string token">'Wed, 09 Aug 1995 00:00:00'</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
<p>Gibt den Wert <code>807937200000</code> in der Zeitzone GMT-0400 zurück und andere Werte in anderen Zeitzonen, wenn im String keine Zeitzone definiert ist und es kein ISO formatiertes Datum ist. Deswegen wird als Standardwert die Ortszeit genutzt.</p>
<pre class="brush: js line-numbers language-js"><code class="language-js">Date<span class="punctuation token">.</span><span class="function token">parse</span><span class="punctuation token">(</span><span class="string token">'Thu, 01 Jan 1970 00:00:00 GMT'</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
<p>Gibt 0 in allen Zeitzonen zurück, weil GMT (UTC) angegeben ist.</p>
<pre class="brush: js line-numbers language-js"><code class="language-js">Date<span class="punctuation token">.</span><span class="function token">parse</span><span class="punctuation token">(</span><span class="string token">'Thu, 01 Jan 1970 00:00:00'</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
<p>Gibt den Wert <code>14400000</code> in der Zeitzone GMT-0400 zurück und andere Werte in anderen Zeitzonen, wenn im String keine Zeitzone definiert ist und es kein ISO formatiertes Datum ist. Deswegen wird als Standardwert die Ortszeit genutzt.</p>
<pre class="brush: js line-numbers language-js"><code class="language-js">Date<span class="punctuation token">.</span><span class="function token">parse</span><span class="punctuation token">(</span><span class="string token">'Thu, 01 Jan 1970 00:00:00 GMT-0400'</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
<p>Gibt <code>14400000</code> in allen Zeitzonen zurück, weil GMT (UTC) angegeben ist.</p>
<h2 id="Spezifikationen">Spezifikationen</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Spezifikation</th>
<th scope="col">Status</th>
<th scope="col">Kommentar</th>
</tr>
<tr>
<td>{{SpecName('ES1')}}</td>
<td>{{Spec2('ES1')}}</td>
<td>Initiale Definition. Implementiert in JavaScript 1.0.</td>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-15.9.4.2', 'Date.parse')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td>Einfaches ISO 8601 Format hinzugefügt.</td>
</tr>
<tr>
<td>{{SpecName('ES6', '#sec-date.parse', 'Date.parse')}}</td>
<td>{{Spec2('ES6')}}</td>
<td> </td>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-date.parse', 'Date.parse')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="Browserkompatibilität">Browserkompatibilität</h2>
<p>{{Compat("javascript.builtins.Date.parse")}}</p>
<h2 id="Kompatibilitätsnotitzen">Kompatibilitätsnotitzen</h2>
<ul>
<li>Firefox 49 {{geckoRelease(49)}} hat das Einlesen von 2-Stelligen Jahreszahlen geändert und hat sich damit an den Google Chrome angepasst und nicht mehr an den Internet Explorer. Jetzt werden 2-Stellige Jahreszahlen, die kleiner oder gleich 50 sind zum 21. Jahrhundert gezählt. Zum Beispiel wird <code>04/16/17</code> jetzt zum 16. April 19 2017 und nicht mehr zum 16. April 1917 eingelesen. Es vermeidet alle Probleme mit mehrdeutigen Jahren. Es wird empfohlen das ISO 8601 (z. B. 2017-04-16) zu benutzen ({{bug(1265136)}}).</li>
</ul>
<h2 id="Siehe_auch">Siehe auch</h2>
<ul>
<li>{{jsxref("Date.UTC()")}}</li>
</ul>
|