「JavaScript/Date」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎資料: 更新; +toLocaleString('ja-JP-u-ca-japanese', {era: 'long'})()
Ef3 (トーク | 投稿記録)
加筆
1 行
{{Nav}}
JavaScriptで時間を扱えるようにするための説明です。
 
== Dateオブジェクト ==
Dateオブジェクトは日付を扱うためのオブジェクトである<ref>https://tc39.es/ecma262/#sec-date-objects 21.4 Date Objects</ref>。
次の様に書くことで、現在時を取得する事が出来る。
<source lang=javascript>
12 ⟶ 11行目:
日付を指定してオブジェクトを作成したい場合には、次の様に日付を指定していく。
<source lang=javascript>
const d = new Date( 2007, 10, 21 ); // 2007年11月21日のオブジェクトを作成
const d = new Date( 2007, 10, 21, 8, 13, 21 ); // 2007年11月21日 8:13:21のオブジェクトを作成
const d = new Date( 99, 6 ); // 1999年7の月のオブジェクトを作成
</source>
(年を0~99で指定した場合は19xx年を設定するため、西暦0~99年を指定したいときはsetFullYearを利用する。)
 
Dateオブジェクトには次の問題点があります
 
まず、Dateオブジェクトは有限の範囲の日付しか扱えないません
この範囲は、UNIX時間にNumber.MAX_SAFE_INTEGER(2 ** 53 - 1)ミリ秒足したもの'''ではない'''事に注意してください
ECMA-262 は、Dateオブジェクトで表すことができる時刻の範囲はエポックから前後 ±100,000,000 (1億) 日、紀元前271821年4月20日から紀元275760年9月13日)と定義しています<ref>[[https://tc39.es/ecma262/#sec-time-values-and-time-range ECMA-262::21.4.1.1 Time Values and Time Range]]</ref>。
 
また、コンピューター現行協定世界計の場合 (UTC) において実際の地球の自転と標準世界のUT1との差を埋め調整するため、数年に一度程度、[[w:閏秒|閏秒]](うるうびょう)が挿入されますが、[[w:ECMA標準|ECMA標準]]では挿入されない仕様となっています。そのため、秒単位では違いがある可能性があります
 
===静的メソッド===
==== Date.parse( string ) ====
文字列を解析して、1970年1月1日からの経過秒(時間をミリ秒)単位で返します。
 
解析した結果はDateオブジェクトで返されるわけではないので、Dateオブジェクトへの変換は次の様に行う。
35 ⟶ 34行目:
d.setTime(Date.parse("2001/9/11"));
</source>
実際にどこRFC2822 たは ISO 8601 解析日付表す文字列であればECMAScriptの仕様に従限りパースできます。それ以外の書式は実装に依存しています<ref>この記述はES5より前の状況、2021年6月現在 ECMA-262 21.4.1.15 Date Time String Format で規定されている。 [[https://tc39.es/ecma262/#sec-date-time-string-format ECMA-262 21.4.1.15 Date Time String Format]]</ref>。
 
==== Date.UTC (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] ) ====
1970年1月1日からの経過秒(時間をミリ秒)単位で返します。
<source lang=javascript>
const d = new Date();
d.setTime( Date.UTC( 2001, 9, 11 ) );
</source>
 
47 ⟶ 46行目:
 
==== Date.prototype.getFullYear() ====
地方時の西暦の年を返します。よく似たメソッドにDate.prototype.getFullYeargetYear()<ref>'''非推奨'''</ref>がありますが、これは1900年からの年数を返すので注意が必要です
 
==== Date.prototype.getMonth() ====
地方時の月を返します。返される値は0~11の範囲の値を取り、実際の月数より1少ない。
つまり1月の場合は0、2月の場合は1が返ります。月名を列挙した配列の添字とおぼえて下さい
<source lang=javascript>
const d = new Date();
|console.log(d); Fri// Mon Jun 1128 2021 0708:1406:4050 GMT+0900 (日本標準時)
console.log(d.getMonth()) // 5
console.log("Jab Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" ")[d.getMonth()]); // Jun
</source>
 
==== Date.prototype.getDate() ====
地方時の日付(1~31)を取得する。
 
==== Date.prototype.getDay() ====
地方時の曜日を取得する。Date.prototype.getDay() メソッドは、地方時に基づき、指定された日付の「曜日」を返します。
曜日を取得する。
 
==== Date.prototype.getHours() ====
地方時の時間(0~23)を取得する。
 
==== Date.prototype.getSeconds() ====
地方時の分(0~59)を取得する。
 
==== Date.prototype.getMinutes() ====
地方時の秒(0~59)を取得する。
 
==== Date.prototype.getMilliseconds() ====
地方時の1秒未満(ミリ秒(1/1000秒単位)を取得する。
 
==== Date.prototype.setFullYear(year [, month [, date ] ] ) ====
地方時の年を設定する。
 
==== Date.prototype.setMonth(month [, date ] ) ====
地方時の(0-11)を設定する。
 
==== Date.prototype.setDate(date) ====
地方時の日を設定する。
 
==== Date.prototype.setHours(hour [, min [, sec [, ms ] ] ] ) ====
地方時の時を設定する。
 
==== Date.prototype.setMinutes(min [, sec [, ms ] ] ) ====
地方時の分を設定する。
 
==== Date.prototype.setSeconds(sec [, ms ] ) ====
地方時の秒を設定する。
 
==== Date.prototype.setMilliseconds(ms) ====
地方時の1秒未満(ミリ秒単位)を設定する。
 
=== 協定世界時のメソッド ===
先述したここまでのメソッドの場合使用するマシンの地方時を対象にしていましたが、国や地域によって時間にいが出るため、ロンドうタイムゾーンのグリニッジ天文台影響基準に位置によらない廃するため[[w:協定世界共通の|協定世界時]](Coordinated Universal Time)を対象して利するメソッドが意されています
[[w:協定世界時|協定世界時]](Coordinated Universal Time)は、現在[[w:グリニッジ標準時|グリニッジ標準時]](GMT)と置き換わって世界標準時として利用されているが生活実感として困るほどの差異は無い。
 
==== Date.prototype.getUTCFullYear() ====
100 ⟶ 104行目:
 
==== Date.prototype.getUTCMonth() ====
協定世界時での月(0-11)を取得する。
 
==== Date.prototype.getUTCDate() ====
117 ⟶ 121行目:
協定世界時でのミリ秒を取得する。
 
==== Date.prototype.setUTCFullYear(year [, month [, date ] ] ) ====
協定世界時での年を設定します。
 
==== Date.prototype.setUTCMonth(month [, date ] ) ====
協定世界時での月を設定します。
 
126 ⟶ 130行目:
協定世界時での日を設定します。
 
==== Date.prototype.setUTCHours(hour [, min [, sec [, ms ] ] ] ) ====
協定世界時での時間を設定します。
 
==== Date.prototype.setUTCMinutes(min [, sec [, ms ] ] ) ====
協定世界時での分を設定します。
 
==== Date.prototype.setUTCSeconds(sec [, ms ] ) ====
協定世界時での秒を設定します。
 
139 ⟶ 143行目:
 
=== 時間取得メソッド ===
これらのメソッドは時間を人間側で見るため可読な文字列取得するためのメソッドである
基本的に人間の読みやすい形式に変換を行うが、標準仕様では書式が統一されていないため、どのように表示されるかは実装に依存しているのが現状である。
そのため、実装に依存しない統一された書式を必要とする場合は、プログラマ側でDateオブジェクトのメソッドをオーバーライド(上書き)するなどのことが必要である。
 
==== Date.prototype.toString() ====
人間に読みやすい形で、文字列に変換した値を返します。
<del>どの様な値を返すのかは仕様に定められておらす、実装によって微妙に値は異なる。</del>
ES2018/ES9までは、 Date.prototype.toString が返す文字列の書式は実装に依存していました<ref>[https://tc39.es/ecma262/#sec-date.prototype.tostring ECMA-262::21.4.4.41 Date.prototype.toString ()]</ref>。
d.ValeuOf() が 1000 で割り切れるような Date オブジェクト d については、Date.parse(d.toString()) === d.valueOf() が真となります。
 
<source lang="javascript">
console.log((new Date()).toString());
</source>
| Fri"Mon Jun 1128 2021 07:1536:1027 GMT+0900 (日本標準時)"
 
例えば主要なブラウザの場合、次の様な文字列が返ります
 
{| class="wikitable"
|- align="left"
! 実装 !! 書式
|-
| Mozilla Firefox 89.0 64 ビット
| Fri Jun 11 2021 07:14:40 GMT+0900 (日本標準時)
|-
| Opera
| Sun, 01 Mar 2009 13:39:03 GMT+0900
|-
| Safari
|
|-
| Google Chrome 91.0.4472.101(Official Build) (64 ビット)
| Fri Jun 11 2021 07:15:10 GMT+0900 (日本標準時)
|-
| Microsoft Edge 91.0.864.41 (公式ビルド) (64 ビット)
| Fri Jun 11 2021 07:18:08 GMT+0900 (日本標準時)
|}
 
==== Date.prototype.toDateString() ====
toStringの変換のうち。年月日にあたる部分の文字列を返します。
{{節スタブ}}
<source lang="javascript">
toStringの変換のうち。年月日にあたる部分の文字列を返す。
console.log((new Date()).toDateString());
{| class="wikitable"
"Mon Jun 28 2021" の様な文字列が返ります。
|- align="left"
</source>
! 実装 !! 書式
|-
| IE
| Sun Mar 1 2009
|-
| Firefox
| Sun Mar 01 2009
|-
| Opera
| Sun, 01 Mar 2009
|-
| Safari
| Sun Mar 01 2009
|-
| Chrome
|
|}
{{節スタブ}}
 
==== Date.prototype.toTimeString() ====
toStringの変換のうち。分秒にあたる部分の文字列を返します。
{| class="wikitable"
|- align="left"
220 ⟶ 187行目:
 
==== Date.prototype.toLocaleString() ====
使用しています環境の、言語や文化に合わせた読みやすい形式の文字列で値を返します。
実際にどの様な値が返るかは実装に依存しており、一定していない。
 
例えば主要なWebブラウザの場合、日本語環境では次の様な値が返ります
{| class="wikitable"
|- align="left"
245 ⟶ 212行目:
 
==== Date.prototype.toLocaleDateString() ====
toLocaleStringの変換のうち、年月日に相当する部分の文字列を返します。
 
{| class="wikitable"
268 ⟶ 235行目:
 
==== Date.prototype.toLocaleTimeString() ====
toLocaleStringの変換のうち。分秒にあたる部分の文字列を返します。
現在の主要なブラウザでは「13:39:03」の様な値が返るが、「13時39分3秒」の様な書式で値が返っても仕様上正しい。
 
==== Date.prototype.toUTCString() ====
結果の書式はtoStrinメソッドと同じものでありますが、ローカルの時間ではなく、協定世界時で結果を返します。
{| class="wikitable"
|- align="left"
306 ⟶ 273行目:
 
==== Date.prototype.getTimezoneOffset() ====
現在の環境とUTC標準との時間差を分で返します。
日本の場合はロンドンからは9時間前倒しなので、9(時間)×60(分)で「-540(分)」が返ります
 
== 資料 ==