JavaScript

レシピ

日付・時間

日付・時刻の計算

24時間後や1週間前など、特定の日時を軸にして時間の計算をする方法について解説します。

この記事のポイント

  • タイムスタンプに数値を足し算・引き算して時間を計算する
  • 時間の単位は「ミリ秒」を起点にする

タイムスタンプを使って時間を計算する

タイムスタンプはNumberの値で、「1970年1月1日 00:00:00」からの経過時間をミリ秒単位で現します。
この値は数値として足し算/引き算をすることができるため、指定した時間のタイムスタンプがあれば「1秒後」「30分前」などの時間の計算をすることができます。

以下の例では「2020年4月1日 00:00:00」のタイムスタンプを取得し、足し算を行って未来の時間を取得して出力します。

コード例

// インスタンス作成
var date = new Date('2020/4/1 00:00:00');
echoTime(date.getTime());
// 2020年4月1日(水) 0:00:00

// 10秒後
var addition_time = 10 * 1000;
echoTime(date.getTime() + addition_time);
// 2020年4月1日(水) 0:00:10

// 30秒後
var addition_time = 30 * 1000;
echoTime(date.getTime() + addition_time);
// 2020年4月1日(水) 0:00:30

// 1分前
var addition_time = 60 * 1000;
echoTime(date.getTime() + addition_time);
// 2020年4月1日(水) 0:01:00

// 30分前
var addition_time = 30 * 60 * 1000;
echoTime(date.getTime() + addition_time);
// 2020年4月1日(水) 0:30:00

// 1時間後
var addition_time = 60 * 60 * 1000;
echoTime(date.getTime() + addition_time);
// 2020年4月1日(水) 1:00:00

// 12時間後
var addition_time = 12 * 60 * 60 * 1000;
echoTime(date.getTime() + addition_time);
// 2020年4月1日(水) 12:00:00

// 1日後
var addition_time = 24 * 60 * 60 * 1000;
echoTime(date.getTime() + addition_time);
// 2020年4月2日(木) 0:00:00

// 7日後(1週間後)
var addition_time = 7 * 24 * 60 * 60 * 1000;
echoTime(date.getTime() + addition_time);
// 2020年4月8日(水) 0:00:00

// 21日後(3週間後)
var addition_time = 21 * 24 * 60 * 60 * 1000;
echoTime(date.getTime() + addition_time);
// 2020年4月22日(水) 0:00:00

// 30日後
var addition_time = 30 * 24 * 60 * 60 * 1000;
echoTime(date.getTime() + addition_time);
// 2020年5月1日(金) 0:00:00

// 90日後
var addition_time = 90 * 24 * 60 * 60 * 1000;
echoTime(date.getTime() + addition_time);
// 2020年6月30日(火) 0:00:00

まずは「2020/4/1 00:00:00」という時間に設定したDateオブジェクトのインスタンスを作成します。
このインスタンスからgetTimeメソッドを実行してタイムスタンプを取得し、echoTime関数に渡して日時を出力します。

echoTime関数は独自に用意した関数で、次のような実装になっています。

コード例

function echoTime(timestamp) {
  var date = new Date(timestamp);
  var options = { weekday: 'short', year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric', second:'numeric' };
  console.log(date.toLocaleDateString( 'ja-JP', options));
}

引数として受け取ったtimestampを使ってDateオブジェクトのインスタンスを作成し、日本語のフォーマットを指定したtoLocaleDateStringメソッドで「2020年4月1日(水) 0:00:00」のように出力します。
この関数は、以降の時間を計算した後の出力でも使っていきます。

以降は全て時間の足し算を行っています。
例えば、1つ目の「10秒後」であれば、「10 * 1000」を計算して変数addition_timeに値を入れます。
この値を、冒頭で作成したDateオブジェクトのインスタンスのタイムスタンプに足し算をして、結果をechoTime関数で出力します。

時間の計算の考え方として、タイムスタンプはミリ秒なので「秒」の計算をしたいときは「秒数 * 1000ミリ秒」で計算します。
この考え方を基にして、次のようにそれぞれの時間の単位ごとに計算をしていきます。

  • 「秒」の計算:x秒 * 1000ミリ秒
  • 「分」の計算:x分 * 60秒 * 1000ミリ秒
  • 「時間」の計算:x時時間 * 60分 * 60秒 * 1000ミリ秒
  • 「日」の計算:x日 * 24時間 * 60分 * 60秒 * 1000ミリ秒
  • 「週」の計算:x週 * 7日 * 24時間 * 60分 * 60秒 * 1000ミリ秒

月単位の計算は月ごとに日数が異なるため、上記の式に当てはめて計算すると数日の誤差が出てしまいます。
そのため、「月」単位や「年」単位の計算をしたいときはsetMonthメソッドsetFullYearメソッドを使って求めた方が正確な値を取得することができます。

続いて、時間の引き算の例を紹介していきます。
変数がaddition_timeからsubtraction_timeになり、計算式が全て「+」から「」になっている点が変更点です。

コード例

// インスタンス作成
var date = new Date('2020/4/1 00:00:00');
echoTime(date.getTime());
// 2020年4月1日(水) 0:00:00

// 10秒前
var subtraction_time = 10 * 1000;
echoTime(date.getTime() - subtraction_time);
// 2020年3月31日(火) 23:59:50

// 30秒後
var subtraction_time = 30 * 1000;
echoTime(date.getTime() - subtraction_time);
// 2020年3月31日(火) 23:59:30

// 1分前
var subtraction_time = 60 * 1000;
echoTime(date.getTime() - subtraction_time);
// 2020年3月31日(火) 23:59:00

// 30分前
var subtraction_time = 30 * 60 * 1000;
echoTime(date.getTime() - subtraction_time);
// 2020年3月31日(火) 23:30:00

// 1時間前
var subtraction_time = 60 * 60 * 1000;
echoTime(date.getTime() - subtraction_time);
// 020年3月31日(火) 23:00:00

// 12時間前
var subtraction_time = 12 * 60 * 60 * 1000;
echoTime(date.getTime() - subtraction_time);
// 2020年3月31日(火) 12:00:00

// 1日前
var subtraction_time = 24 * 60 * 60 * 1000;
echoTime(date.getTime() - subtraction_time);
// 2020年3月31日(火) 0:00:00

// 7日後(1週間前)
var subtraction_time = 7 * 24 * 60 * 60 * 1000;
echoTime(date.getTime() - subtraction_time);
// 2020年3月25日(水) 0:00:00

// 21日後(3週間前)
var subtraction_time = 21 * 24 * 60 * 60 * 1000;
echoTime(date.getTime() - subtraction_time);
// 2020年3月11日(水) 0:00:00

// 30日前
var subtraction_time = 30 * 24 * 60 * 60 * 1000;
echoTime(date.getTime() - subtraction_time);
// 2020年3月2日(月) 0:00:00

// 90日前
var subtraction_time = 90 * 24 * 60 * 60 * 1000;
echoTime(date.getTime() - subtraction_time);
// 2020年1月2日(木) 0:00:00

時間の引き算をすることで、「2020年4月1日」から遡った時間を取得することができます。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。