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'
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です