Dateオブジェクトには、UTCの基準時間から経過したミリ秒を取得するメソッドが用意されています。
取得した経過ミリ秒は、ある日時からの差分を計算する時などに使えます。

そこで今回は、getTimeメソッドを使って経過ミリ秒を取得する方法を解説していきます。

経過ミリ秒を取得するメソッド

Dateオブジェクトでは、次のメソッドを使って基準時間(UTC 1970年1月1日0時0分0秒)からの経過ミリ秒を取得することができます。

  • getTime()
  • valueOf()

JavaScriptは、内部的には日付や時刻をミリ秒で保持しています。
Dateオブジェクトから経過ミリ秒を取得すつと、ある2つの経過ミリ秒の差分を計算することができます。

getTimeメソッドとvalueOfメソッドは、どちらも機能的には変わらないため、今回はgetTimeメソッドを使って解説していきます。

getTimeメソッドの使い方

getTimeメソッドの構文は以下です。

Dateオブジェクト.getTime();

では、現在時刻を持つDateオブジェクトを作成し、経過ミリ秒を取得してみましょう。

let now = new Date();

console.log(now.getTime()); // 1654525795212

1654525795212が、変数nowが持つ経過ミリ秒です。
これは現在時刻を持つDateオブジェクトであるため、時間が経過する度に値は変化します。

// new Dateは、現在時刻を取得する
let now = new Date();
// 経過ミリ秒も変わる
console.log(now.getTime()); // 1654525875781

また、任意の日付や時刻を指定したDateオブジェクトにgetTimeメソッドを使うと、経過時間をミリ秒に換算して返されます。

let date = new Date('2000/12/15');

console.log(date.getTime()); // 976834800000

上記は、1970年1月1日0時0分0秒から2000年12月15日0時0分0秒までの経過ミリ秒です。

実行時間の計算

getTimeメソッドでミリ秒を取得できると、処理にかかる時間を計算することができます。

以下は、値がtrueであれば、iが9になるまでの間繰り返し出力を行うコードです。

let startTime;
let endTime;

// 処理の開始時間
startTime = new Date();
if (true) {
  for (let i = 1; i < 10; i++) {
    console.log(i + '回目の処理');
  }
} 
// 処理の終了時間
endTime = new Date();

// 終了ミリ秒 - 開始ミリ秒 = 実行時間のミリ秒
console.log('実行時間:' + (endTime.getTime() - startTime.getTime()) + 'ミリ秒'); 
// "1回目の処理"
// "2回目の処理"
// "3回目の処理"
// "4回目の処理"
// "5回目の処理"
// "6回目の処理"
// "7回目の処理"
// "8回目の処理"
// "9回目の処理"
// "実行時間:3ミリ秒"

処理が始まる前と終わる段階の2回、現在時刻を取得しています。
endTime.getTime() - startTime.getTime()のように、終了のミリ秒から開始のミリ秒を引くことで、処理にかかった時間をミリ秒で取得することができます。
この場合、実行時間にかかったのは3ミリ秒です。

経過ミリ秒を日に変換

取得した経過ミリ秒を日に変換して、特定の日までの残り日数を取得することもできます。

以下は、6月1日から6月30日までの日数を求めるコードです。

function getHours() {
  let startDate = new Date('2022/6/1');
  let endDate = new Date('2022/6/30');

  let diff = endDate.getTime() - startDate.getTime();
  console.log(diff); 

 // 1日のミリ秒の値(1000ミリ秒 * 60秒 * 60分 * 24時間)
  let day = 1000 * 60 * 60 * 24;
  // 6月1日から6月30日までのミリ秒 / 1日のミリ秒
  console.log(diff / day); 
}

getHours();
// 29

ミリ秒を日に変換するには、let day = 1000 * 60 * 60 * 24のように、1日あたりのミリ秒を計算し、diff / dayのように、2つの日数間のミリ秒を1日あたりのミリ秒で割ります。
これにより、6月1日から30日までの経過ミリ秒を日数に変換することができます。

また、日だけではなく、時・分・秒にもかんたんに変換することができます。

// 1時間のミリ秒の値(1000ミリ秒 * 60秒 * 60分)
let hour = 1000 * 60 * 60;
// 1分のミリ秒の値(1000ミリ秒 * 60秒)
let min = 1000 * 60;
// 1秒のミリ秒の値(1000ミリ秒)
let sec = 1000;

別記事で改めて紹介しますが、JavaScriptには、Mathオブジェクトと呼ばれる数値計算に便利なビルドインオブジェクトが用意されているため、使えるようになるとさらに便利です。

まとめ

今回は、Dateオブジェクトから経過ミリ秒を取得するインスタンスメソッドについて解説しました。

経過ミリ秒を取得することで、他の値からの差分を計算することができます。
このような計算は、後にカウントダウンなどの機能を作る際に役立ちます。ぜひ活用してみてください。

合わせて読みたいDateオブジェクトシリーズ

第1回:Dateオブジェクトの作成
第2回:Dateオブジェクトとインスタンスメソッド -日付・時刻の取得
第3回:Dateオブジェクトとインスタンスメソッド -文字列の取得
第4回:Dateオブジェクトとインスタンスメソッド -経過ミリ秒の取得(当記事)
第5回:Dateオブジェクトと静的メソッド