aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/javascript/reference/global_objects/date/index.html
blob: 8c6650f3e4dcc9930f95c7628175d20f0df2c7cf (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
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
---
title: Date
slug: Web/JavaScript/Reference/Global_Objects/Date
tags:
  - Class
  - Date
  - Epoch
  - JavaScript
  - Time
  - Unix Epoch
  - timeStamp
  - クラス
  - 日付
  - 日時
  - 時刻
translation_of: Web/JavaScript/Reference/Global_Objects/Date
---
<div>{{JSRef}}</div>

<p><span class="seoSummary">JavaScript の <strong><code>Date</code></strong> オブジェクトは、単一の瞬間の時刻をプラットフォームに依存しない形式で表します。</span> <code>Date</code> オブジェクトは協定世界時 (UTC) の1970年1月1日からの経過ミリ秒数を表現する <code>Number</code> の値を含んでいます。</p>

<h2 id="Description" name="Description">解説</h2>

<h3 id="The_ECMAScript_epoch_and_timestamps" name="The_ECMAScript_epoch_and_timestamps">ECMAScript Epoch とタイムスタンプ</h3>

<p>JavaScript の日時は、基本的に協定世界時 (UTC) の1970年1月1日深夜0時からの経過ミリ秒数で指定されます。この日付と時刻は、コンピューターに記録される日付と時刻の値の主な基準値である <strong>UNIX Epoch</strong> (UTC の1970年1月1日深夜0時からの経過秒数) とは異なります。</p>

<div class="blockIndicator note">
<p><strong>注:</strong> Date オブジェクトの中心となる時間値は UTC ですが、日付と時刻、またはその一部を取得する基本的なメソッドは、すべて地方時 (ホストシステムなど) のタイムゾーンとオフセットで動作することを覚えておくことが重要です。</p>
</div>

<p><code>Date</code> の最大値は、確実な整数の最大値 (<code>Number.MAX_SAFE_INTEGER</code>、9,007,199,254,740,991) と同じ値ではないことに注意が必要です。代わりに ECMA-262 では、 UTC の 1970年1月1日から前後 ±100,000,000 (1億) 日 (つまり、紀元前271821年4月20日 - 紀元275760年9月13日) を標準の <code>Date</code> オブジェクトで表すことができると定義しています。</p>

<h3 id="Date_format_and_time_zone_conversions" name="Date_format_and_time_zone_conversions">日時形式とタイムゾーンの変換</h3>

<p>様々な形式で日時を取得したり、タイムゾーンの変換を行ったりすることができる方法はたくさんあります。特に便利なのは、<ruby>世界時標準<rp> (</rp><rt>World Time Standard</rt><rp>) </rp></ruby>で定義されている世界標準時である協定世界時 (UTC) で日付と時刻を出力する関数です。 (この時間は歴史的に<em>グリニッジ標準時</em>として知られており、 UTC はイギリスのロンドンとその近くのグリニッジを含む子午線に沿って位置しています。) ユーザーの端末は現地時間を提供します。</p>

<p>地方時の日付と時刻の個々の部分を読み書きするメソッド ({{jsxref("Date.getDay", "getDay()")}} や {{jsxref("Date.setHours", "setHours()")}} など) に加えて、 UTC を使用して日付と時刻を読み書きする同等のメソッド ({{jsxref("Date.getUTCDay()", "getUTCDay()")}} や {{jsxref("Date.setUTCHours", "setUTCHours()")}} など) もあります。</p>

<h2 id="Constructor" name="Constructor">コンストラクター</h2>

<dl>
 <dt>{{jsxref("Date/Date", "Date()")}}</dt>
 <dd>新たな <code>Date</code> オブジェクトを生成します。</dd>
</dl>

<h2 id="Static_methods" name="Static_methods">静的メソッド</h2>

<dl>
 <dt>{{jsxref("Date.now()")}}</dt>
 <dd>現在の時刻に対応する数値、すなわち UTC の 1970 年 1 月 1 日 00:00:00 から経過したミリ秒 (閏秒は無視) を表す数値を返します。</dd>
 <dt>{{jsxref("Date.parse()")}}</dt>
 <dd>JavaScript で日付を表す文字列を解釈して、地方時で 1970 年 1 月 1 日 00:00:00 から経過したミリ秒 (閏秒は無視) を表す数値を返します。
 <div class="note">
 <p><strong>注:</strong> ブラウザーごとに動作が異なり一貫性がないため、 <code>Date.parse</code> で文字列を解釈しないように強くすすめます。</p>
 </div>
 </dd>
 <dt>{{jsxref("Date.UTC()")}}</dt>
 <dd>コンストラクターですべての引数を与えて呼び出したのと同じように、 UTC の 1970 年 1 月 1 日 00:00:00 から経過したミリ秒数 (閏秒は無視) を返します。</dd>
</dl>

<h2 id="Instance_methods" name="Instance_methods">インスタンスメソッド</h2>

<dl>
 <dt>{{jsxref("Date.prototype.getDate()")}}</dt>
 <dd>地方時に基づき、指定された日時の「日」 (<code>1</code><code>31</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getDay()")}}</dt>
 <dd>地方時に基づき、指定された日時の「曜日」 (<code>0</code><code>6</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getFullYear()")}}</dt>
 <dd>地方時に基づき、指定された日時の「年」 (4桁の年であれば4桁) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getHours()")}}</dt>
 <dd>地方時に基づき、指定された日時の「時」 (<code>0</code><code>23</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getMilliseconds()")}}</dt>
 <dd>地方時に基づき、指定された日時の「ミリ秒」 (<code>0</code><code>999</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getMinutes()")}}</dt>
 <dd>地方時に基づき、指定された日時の「分」 (<code>0</code><code>59</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getMonth()")}}</dt>
 <dd>地方時に基づき、指定された日時の「月」 (<code>0</code><code>11</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getSeconds()")}}</dt>
 <dd>地方時に基づき、指定された日時の「秒」 (<code>0</code><code>59</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getTime()")}}</dt>
 <dd>指定された日時を協定世界時 (UTC) の 1970 年 1 月 1 日 00:00:00 からの経過ミリ秒単位の数値で返します。 (それ以前の時刻では負の数を返します。)</dd>
 <dt>{{jsxref("Date.prototype.getTimezoneOffset()")}}</dt>
 <dd>現地の時間帯のオフセットを分で返します。</dd>
 <dt>{{jsxref("Date.prototype.getUTCDate()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「日」 (<code>1</code><code>31</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getUTCDay()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「曜日」 (<code>0</code><code>6</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getUTCFullYear()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「年」 (4桁の年であれば4桁) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getUTCHours()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「時」 (<code>0</code><code>23</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getUTCMilliseconds()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「ミリ秒」 (<code>0</code><code>999</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getUTCMinutes()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「分」 (<code>0</code><code>59</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getUTCMonth()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「月」 (<code>0</code><code>11</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getUTCSeconds()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「秒」 (<code>0</code><code>59</code>) を返します。</dd>
 <dt>{{jsxref("Date.prototype.getYear()")}}</dt>
 <dd>地方時に基づき、指定された日時の「年」 (ふつうは2–3桁) を返します。代わりに {{jsxref("Date.prototype.getFullYear()", "getFullYear()")}} を使用してください。</dd>
 <dt>{{jsxref("Date.prototype.setDate()")}}</dt>
 <dd>地方時に基づき、指定された日時の「日」を設定します。</dd>
 <dt>{{jsxref("Date.prototype.setFullYear()")}}</dt>
 <dd>地方時に基づき、指定された日時の「年」を完全な形 (例えば、4桁の年であれば4桁) で設定します。</dd>
 <dt>{{jsxref("Date.prototype.setHours()")}}</dt>
 <dd>地方時に基づき、指定された日時の「時」を設定します。</dd>
 <dt>{{jsxref("Date.prototype.setMilliseconds()")}}</dt>
 <dd>地方時に基づき、指定された日時の「ミリ秒」を設定します。</dd>
 <dt>{{jsxref("Date.prototype.setMinutes()")}}</dt>
 <dd>地方時に基づき、指定された日時の「分」を設定します。</dd>
 <dt>{{jsxref("Date.prototype.setMonth()")}}</dt>
 <dd>地方時に基づき、指定された日時の「月」を設定します。</dd>
 <dt>{{jsxref("Date.prototype.setSeconds()")}}</dt>
 <dd>地方時に基づき、指定された日時の「秒」を設定します。</dd>
 <dt>{{jsxref("Date.prototype.setTime()")}}</dt>
 <dd>{{jsxref("Date")}} オブジェクトを協定世界時(UTC) の 1970 年 1 月 1 日 00:00:00 からのミリ秒単位の数で表された時刻に設定します。</dd>
 <dt>{{jsxref("Date.prototype.setUTCDate()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「日」を設定します。</dd>
 <dt>{{jsxref("Date.prototype.setUTCFullYear()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「年」を完全な形で設定します。</dd>
 <dt>{{jsxref("Date.prototype.setUTCHours()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「時」を設定します。</dd>
 <dt>{{jsxref("Date.prototype.setUTCMilliseconds()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「ミリ秒」を設定します。</dd>
 <dt>{{jsxref("Date.prototype.setUTCMinutes()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「分」を設定します。</dd>
 <dt>{{jsxref("Date.prototype.setUTCMonth()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「月」を設定します。</dd>
 <dt>{{jsxref("Date.prototype.setUTCSeconds()")}}</dt>
 <dd>協定世界時に基づき、指定された日時の「秒」を設定します。</dd>
 <dt>{{jsxref("Date.prototype.setYear()")}}</dt>
 <dd>協定地方時に基づき、指定された日時の「年」 (ふつうは2–3桁) を設定します。代わりに {{jsxref("Date.prototype.setFullYear()", "setFullYear()")}} を使用してください。</dd>
 <dt>{{jsxref("Date.prototype.toDateString()")}}</dt>
 <dd>{{jsxref("Date")}} の「日付」部を、 'Thu Apr 12 2018' のように人間が読みやすい形式の文字列にして返します。</dd>
 <dt>{{jsxref("Date.prototype.toISOString()")}}</dt>
 <dd>日付を ISO 8601 Extended Format に準じた文字列に変換します。</dd>
 <dt>{{jsxref("Date.prototype.toJSON()")}}</dt>
 <dd>{{jsxref("Date.prototype.toISOString()", "toISOString()")}} を使用して {{jsxref("Date")}} を表す文字列を返します。{{jsxref("JSON.stringify()")}} の代わりに使用してください。</dd>
 <dt>{{jsxref("Date.prototype.toGMTString()")}}</dt>
 <dd>GMT (UTC) タイムゾーンを基準にした {{jsxref("Date")}} を表す文字列を返します。代わりに {{jsxref("Date.prototype.toUTCString()", "toUTCString()")}} を使用してください。</dd>
 <dt>{{jsxref("Date.prototype.toLocaleDateString()")}}</dt>
 <dd>システム設定の日時の「日付」部を、地域の日付書式に従った文字列に変換して返します。</dd>
 <dt>{{jsxref("Date.prototype.toLocaleFormat()")}}</dt>
 <dd>書式化された文字列を使って、日時を文字列に変換します。</dd>
 <dt>{{jsxref("Date.prototype.toLocaleString()")}}</dt>
 <dd>日付を地域の日付書式に従った文字列に変換して返します。{{jsxref("Object.prototype.toLocaleString()")}} メソッドを上書きします。</dd>
 <dt>{{jsxref("Date.prototype.toLocaleTimeString()")}}</dt>
 <dd>システム設定の日時の「時刻」部を、地域の日付書式に従った文字列に変換して返します。</dd>
 <dt>{{jsxref("Date.prototype.toString()")}}</dt>
 <dd>指定された {{jsxref("Date")}} オブジェクトを表す文字列を返します。 {{jsxref("Object.prototype.toString()")}} メソッドを上書きします。</dd>
 <dt>{{jsxref("Date.prototype.toTimeString()")}}</dt>
 <dd>{{jsxref("Date")}} の「時刻」部を人間が読みやすい形式の文字列にして返します。</dd>
 <dt>{{jsxref("Date.prototype.toUTCString()")}}</dt>
 <dd>日時を UTC タイムゾーンを使用する文字列に変換します。</dd>
 <dt>{{jsxref("Date.prototype.valueOf()")}}</dt>
 <dd>{{jsxref("Date")}} オブジェクトのプリミティブ値を返します。{{jsxref("Object.prototype.valueOf()")}} メソッドを上書きします。</dd>
</dl>

<h2 id="Examples" name="Examples"></h2>

<h3 id="Several_ways_to_create_a_Date_object" name="Several_ways_to_create_a_Date_object">Date オブジェクトを生成するいくつかの方法</h3>

<p>以下の例で、 JavaScript の日時を生成するいくつかの方法を示します。</p>

<div class="note">
<p><strong>注:</strong> <code>Date</code> コンストラクター (または同等の <code>Date.parse</code>) で日付文字列を解釈することは、ブラウザーごとに動作が異なり一貫性がないため、避けるように強くすすめます。</p>
</div>

<pre class="brush: js notranslate">let today = new Date()
let birthday = new Date('December 17, 1995 03:24:00')
let birthday = new Date('1995-12-17T03:24:00')
let birthday = new Date(1995, 11, 17)            // 月は 0 起点
let birthday = new Date(1995, 11, 17, 3, 24, 0)
</pre>

<h3 id="Two_digit_years_map_to_1900_–_1999" name="Two_digit_years_map_to_1900_–_1999">2桁の年は1900–1999年に対応付けられる</h3>

<p>西暦 0 年から 99 年までの間の年を生成および取得するには、{{jsxref("Date.prototype.setFullYear()")}} メソッドと {{jsxref("Date.prototype.getFullYear()")}} メソッドを使用してください。</p>

<pre class="brush: js notranslate">var date = new Date(98, 1); // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)

// 非推奨のメソッド。この 98 は1998年に対応付けられます。
date.setYear(98)            // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)

date.setFullYear(98)        // Sat Feb 01 0098 00:00:00 GMT+0000 (BST)
</pre>

<h3 id="Calculating_elapsed_time" name="Calculating_elapsed_time">経過時間の計算</h3>

<p>以下の例で、2 つの JavaScript の日付の間で経過した時間を計る方法を示します。</p>

<p>日 (サマータイム切り替えによる)、月、年の長さが異なるため、経過時間を時、分、秒以上の単位で表現するには、いくつかの問題に対処する必要がありますので、事前によく調べて使用してください。</p>

<pre class="brush: js notranslate">// Date オブジェクトを使用
let start = Date.now()

// 時間を計りたいイベントをここに置く:
doSomethingForALongTime()
let end = Date.now()
var elapsed = end - start // ミリ秒単位の経過時間
</pre>

<pre class="brush: js notranslate">// 組み込みメソッドを使用
var start = new Date()

// 時間を計りたいイベントをここに置く
doSomethingForALongTime()
let end = new Date()
let elapsed = end.getTime() - start.getTime() // ミリ秒単位の経過時間
</pre>

<pre class="brush: js notranslate">// 関数をテストして戻り値を取得する
function printElapsedTime(fTest) {
  let nStartTime = Date.now(),
      vReturn = fTest(),
      nEndTime = Date.now()

  console.log(`Elapsed time: ${ String(nEndTime - nStartTime) } milliseconds`)
  return vReturn
}

let yourFunctionReturn = printElapsedTime(yourFunction)
</pre>

<div class="note">
<p><strong>注:</strong> {{domxref("Window.performance", "Web Performance API", "", 1)}} の高精度時刻機能に対応しているブラウザーでは、 {{domxref("Performance.now()")}} で、 {{jsxref("Date.now()")}} よりも高信頼かつ高精度な経過時間の測定が可能です。</p>
</div>

<h3 id="Get_the_number_of_seconds_since_the_ECMAScript_Epoch" name="Get_the_number_of_seconds_since_the_ECMAScript_Epoch">ECMAScript Epoch からの経過秒数を取得する</h3>

<pre class="brush: js notranslate">let seconds = Math.floor(Date.now() / 1000)
</pre>

<p>この場合、整数だけを返すことが重要です (単純な除算ではできません)。また、実際に経過した秒数を返すことも重要です (ですから、上の例では {{jsxref("Math.round()")}} ではなく {{jsxref("Math.floor()")}} を使っています)。</p>

<h2 id="Specifications" name="Specifications">仕様書</h2>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">仕様書</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-date-objects', 'Date')}}</td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>

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

<h2 id="See_also" name="See_also">関連情報</h2>

<ul>
 <li>{{jsxref("Date/Date", "Date()")}} constructor</li>
</ul>