JavaScript 日付を扱う #3

株式会社リュディアです。JavaScript 日付を扱う #1JavaScript 日付を扱う #2 に引き続き、今回も日付の処理についてまとめます。掲載するソースコードはすべて GAS の開発環境で動作確認をしています。

今回は日付や時間の演算についてまとめていきます。以下のコードをみてください。

function myFunction() {
 const now = new Date() ;
 const date1 = new Date( 2020/8/15 ) ;
 
 const diff = now - date1 ;
 console.log( diff ) ;
 
}

// 実行結果
// 1599017692741

前回と同様に変数 now に new で Date 型オブジェクトを生成して代入しています。さらに変数 date1 に 2020 年 8 月 15 日をもつオブジェクトを生成して代入しています。この 2 つの変数の差をとると結果はどうなるでしょうか?希望としては 2 つの変数の日付の差である 18 日が欲しいですが、1599017692741 という何かよくわからない値になりました。

何がおこっているのか見ていきます。わかりやすくするために 変数 now に new で Date 型オブジェクトを生成して代入し、変数 date1 には昨日の情報をもつオブジェクトを生成して代入します。

function myFunction2() {
 const now = new Date( '2020/9/2' ) ;
 const date1 = new Date( '2020/9/1' ) ;
 const dayInMilliseconds = 24*60*60*1000 ;
 
 const diff = ( now - date1 ) / dayInMilliseconds ;
 console.log( now ) ;
 console.log( date1 ) ;
 console.log( dayInMilliseconds ) ;
 console.log( diff ) ; 
}

// 実行結果
// Wed Sep 02 2020 00:00:00 GMT+0900 (日本標準時)
// Tue Sep 01 2020 00:00:00 GMT+0900 (日本標準時)
// 86400000
// 1

now と date1 の差をとった値は 86400000 とよくわからない値が入っています。実は JavaScript で日付の差をとるとミリ秒の値を返してきます。そのため日で差を見たい場合は 1日 = 24時間 = 24 x 60 分 = 24 x 60 x 60秒 = 24 x 60 x 60 x 1000 ミリ秒 で割る必要があります。割った値を実行結果の最後に出力しているように 1 となっていますね。これで 2 つの変数に設定されている日付情報の差が 1 日と求まりました。

実際のプログラムでは 2 つの日の前後関係を調べる状況がよく発生します。前後関係を調べるには以下のようにして符号を確認します。

function myFunction3() {
 const now = new Date( '2020/9/2' ) ;
 const date1 = new Date( '2020/9/1' ) ;
 
 const diff1 = ( now - date1 ) ;
 const diff2 = ( date1 - now ) ;
 console.log( diff1 ) ;
 console.log( diff2 ) ;

}

// 実行結果
// 86400000
// -86400000

now - date1 と date1 - now の双方の値を求めてみました。いずれもミリ秒単位で見辛く感じるかもしれませんが、ここで重要なのは符号です。一方にマイナス符号がついています。この符号の有無により日付の前後関係を確認することができます。

最後に日付を前後に動かす例について示します。以下をみてください。

function myFunction4() {
 const now = new Date( '2020/9/2' ) ;
 console.log( now ) ;
 
 now.setMonth( now.getMonth() - 1 ) ;
 console.log( now ) ;
}

// 実行結果
// Wed Sep 02 2020 00:00:00 GMT+0900 (日本標準時)
// Sun Aug 02 2020 00:00:00 GMT+0900 (日本標準時)

now の1 ヵ月前の日付を計算により求めています。getMonth で得た月から 1 を引いた値を setMonth で再設定しています。狙い通り Sep ( 9月 ) だった月の情報が Aug ( 8月 ) になっていることが確認できますね。

JavaScript の Date オブジェクトに関するまとめは今回で終わりです。次回からは外部ライブラリを使う方法についてまとめてみたいと思います。

では、ごきげんよう。

この記事が気に入ったらサポートをしてみませんか?