Dateオブジェクトの使い方
JavaScriptで日付時刻を表すDateオブジェクトの動作や使用方法について。
現在時刻を取得する
引数なしでコンストラクタを実行すると、現在の日付と時刻を表すDate
オブジェクトを生成します。
new Date()
console.log(new Date()); // '2023-12-13T03:00:16.380Z'
経過時間の取得
Date.now()
はUTCの1970年1月1日 00:00:00から経過したミリ秒数を表す数値を返します。よって、結果に対してDate
クラスのメソッドは利用できません。
console.log(Date.now()); // '1702432167309'
const now = Date.now();
console.log(now.getFullYear()); // Error: now.getFullYear is not a function
Date.now()
の値は、現在時刻オブジェクトに対してgetTime()
メソッドをコールした場合と同等です。(下記、差分は実行時間の遅れ)
console.log(new Date().getTime()); // 1702432249505
console.log(Date.now()); // 1702432249508
また、Date
オブジェクトのsetTime()
メソッドで、Date.now()
の値を設定すれば、現在の日付と時刻を表すDate
オブジェクトになります。
const dt = new Date('2023-08-30');
console.log(dt); // '2023-08-30T00:00:00.000Z'
dt.setTime(Date.now());
console.log(dt); // '2023-12-13T03:00:16.384Z'
任意の日付時刻のDateオブジェクトを生成する
コンストラクタに日付時刻の文字列を設定します。下記サンプルでは、console.log(Dateオブジェクト)
で、UTC時間が出力されます。
const dt1 = new Date('2099-12-31');
console.log(dt1); // '2099-12-31T00:00:00.000Z'
// ローカル時間として設定
const dt2 = new Date('2000-01-01 13:00:30');
console.log(dt2); // '2000-01-01T04:00:30.000Z'
console.log(dt2.toString()); // 'Sat Jan 01 2000 13:00:30 GMT+0900 (日本標準時)'
// UTC時間として設定
const dt3 = new Date('2000-01-01T13:00:30Z');
console.log(dt3); // '2000-01-01T13:00:30.000Z'
console.log(dt3.toString()); // 'Sat Jan 01 2000 22:00:30 GMT+0900 (日本標準時)'
ローカルタイムゾーンの文字列を出力する
toString(
)メソッドを使用します。
const dt = new Date();
console.log(dt.toString()); // 'Wed Dec 13 2023 10:58:11 GMT+0900 (日本標準時)'
取得・設定メソッドの値について
取得・設定の各メソッドはローカル時間で取得・設定できます。UTC時間で取得や設定したい場合は、UTCと付いたメソッドを利用します。
const dt = new Date();
console.log(dt.getHours()); // '11'
console.log(dt.getUTCHours()); // '2'
下記のように、日付を跨いでいる場合は、どちらのメソッドを使うかで、時刻を設定する日付も異なってしまうので、注意が必要です。
const dt = new Date('2020-01-01 08:00:00');
console.log(dt); // '2019-12-31T23:00:00.000Z'
dt.setHours(5);
console.log(dt.toString()); // 'Wed Jan 01 2020 05:00:00 GMT+0900 (日本標準時)'
dt.setUTCHours(5);
console.log(dt.toString()); // 'Tue Dec 31 2019 14:00:00 GMT+0900 (日本標準時)'
設定時の値
設定メソッドに設定範囲を超える値(分の設定で61など)やマイナスの値を設定した場合でも、時間換算してくれます。
- 12時に対して95分設定
const dt = new Date('2023-12-13 12:15:00'); dt.setMinutes(95); console.log(dt.toString()); // 'Wed Dec 13 2023 13:35:00 GMT+0900 (日本標準時)'
- 12時に対してマイナス30分設定
const dt = new Date('2023-12-13 12:15:00'); dt.setMinutes(-30); console.log(dt.toString()); // 'Wed Dec 13 2023 11:30:00 GMT+0900 (日本標準時)'
現在時刻に加算したい場合は、getMinutes()
した値と加算したい値の合算をsetMinutes()
することで、実現できます。
const dt = new Date('2023-12-13 12:15:00');
let addMinutes = dt.getMinutes() + 95;
dt.setMinutes(addMinutes);
console.log(dt.toString()); // 'Wed Dec 13 2023 13:50:00 GMT+0900 (日本標準時)'
その他
ゼロパディングしたローカル時刻文字列の生成例です。
const zeroPadding = (t, n) => ('000' + t).slice(-n);
const dt = new Date();
const localTimeString = dt.getFullYear() + '/' +
zeroPadding(dt.getMonth() + 1, 2) + '/' +
zeroPadding(dt.getDate(), 2) + ' ' +
zeroPadding(dt.getHours(), 2) + ':' +
zeroPadding(dt.getMinutes(), 2) + ':' +
zeroPadding(dt.getSeconds(), 2) + '.' +
zeroPadding(dt.getMilliseconds(), 3);
console.log(localTimeString); // '2023/12/13 09:15:05.092'