みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。
前回の記事はコチラ。
momentオブジェクトの各要素を取り出したり、セットしたりする方法についてお伝えしました。
今回は、二つのmomentオブジェクトが表す日時が等しいか、以前か、以降か…といった比較について考えてみたいと思います。
これもMoment.jsライブラリを使うと、Dateオブジェクトを使うよりも劇的に簡単に表現することができるんですね。
では、Google Apps ScriptのMoment.jsライブラリで日付の比較をする方法です。
行ってみましょう!
Dateオブジェクトの比較
もっと他の良い方法があるのかも知れないのですが、二つのDateオブジェクトの年、月、日を比較する場合に、過去こんな関数を作成していたんですね。
/* 2つの日付が等しいかを比較する */ function compareDate(date1,date2){ if(date1.getFullYear() === date2.getFullYear() && date1.getMonth() === date2.getMonth() && date1.getDate() === date2.getDate()){ return true; }else{ return false; } }
if(date1 === date2)みたいに表現したいのですが、dateオブジェクトには年月日だけでなく、時分秒の要素も含まれているので、年月日が等しいかどうかを判定したい場合は、このように表現せざるを得ないのです。
んー、スマートじゃないですよね…
isSameメソッドでmomentオブジェクトが等しいか判定する
これが、momentオブジェクトだと、超スッキリ表現ができます。
二つのmomentオブジェクトの要素が等しいかどうかは、momentオブジェクトにisSameメソッドを使いまして、このように書きます。
日付はいくつかの指定の仕方がありまして
・Dateオブジェクト
・日時を表す文字列
・配列 ※例:[2020, 2, 3, 12, 0, 0] ※monthは0~11の値
・UNIX時間×1000
のいずれかで指定します。
要素を表す文字列は
・month
・week
・day
・hour
・minute
・second
のいずれかを文字列で指定します。この点、詳細は後ほどのお楽しみ。
第二引数は省略もできますが、省略をするとmomentオブジェクト同士をそのまま比較しますので、年~ミリ秒までピッタリかどうかを判定します。
isSameメソッドによる年の比較
二つのmomentオブジェクトの年が等しいかどうか知りたいなら、要素を表す文字列を「year」として
Moment.moment('2020/2/3').isSame('2020/3/4','year'); //true Moment.moment('2020/2/3').isSame('2019/2/3','year'); //false
とします。
isSameメソッドによる年月日の比較
では、年月日を知りたい場合はどうしますか?
その場合は、要素を表す文字列を「day」とします。
Moment.moment('2020/2/3 16:55').isSame('2020/2/3 17:00','day'); //true Moment.moment('2020/2/3').isSame('2020/2/2','day'); //false Moment.moment('2020/2/3').isSame('2020/1/3','day'); //false Moment.moment('2020/2/3').isSame('2019/2/3','day'); //false
わかりますか?
要素を表す文字列を指定すると、それよりも上位の要素全てを比較してくれるんですね。ですから、「day」を指定すると、「year」「month」も同じかどうかを比較してくれます。
ですから冒頭の関数compareDateは
Moment.moment(date1).isSame(date2,'day'); //true
これで表現ができちゃうということになります。
スマート!
isSameメソッドによる週の比較
同様にweekを使えば
Moment.moment('2020/2/3').isSame('2020/2/4','week'); //true Moment.moment('2020/2/3').isSame('2020/2/5','week'); //false
同じ週かどうかを判定することができます。
これは便利!!
他のmomentオブジェクトを比較するメソッド
Moment.jsライブラリには他にもmomentオブジェクトを比較する便利なメソッドがありますので紹介しますね。
IsBeforeメソッドで前の日時かを判定する
momentオブジェクトが指定の日付よりも前かどうかを判定する場合はisBeforeメソッドを使います。
momentオブジェクト.isBefore(日付, 要素を表す文字列)
Moment.moment('2020/2/3').isBefore('2020/2/2'); //false Moment.moment('2020/2/3').isBefore('2020/2/3'); //false Moment.moment('2020/2/3').isBefore('2020/2/4'); //true
IsAfterメソッドで後の日時かを判定する
momentオブジェクトが指定の日付よりも後かどうかを判定する場合はisAfterメソッドを使います。
momentオブジェクト.isAfter(日付, 要素を表す文字列)
Moment.moment('2020/2/3').isAfter('2020/2/2'); //true Moment.moment('2020/2/3').isAfter('2020/2/3'); //false Moment.moment('2020/2/3').isAfter('2020/2/4'); //false
Google Apps ScriptのMoment.jsライブラリでは使えないメソッド
本家のMoment.jsドキュメントには日時を比較する他のメソッドとして
- isBetween
- isSameOrBefore
- isSameOrAfter
が紹介されていたのですが一連のシリーズで使用しているGoogle Apps Script用のライブラリでは使用ができないようです。
とはいえ、全くないよりは断然良いですからね。バッチリ活用しましょう。
まとめ
Google Apps ScriptのMoment.jsライブラリで日付の比較をする方法をお伝えしてきました。
Moment.jsライブラリを使うととっても簡単に日付の比較ができますね。そしてスマート!
さて、次回ですが、Moment.jsライブラリで日時の加算・減算をする方法についてお伝えしたいと思います。
どうぞお楽しみに!
連載目次:Google Apps ScriptでMoment.jsを使う
Google Apps Scriptでよく取り扱う日付と時刻。しかし、JavaScriptの標準Dateオブジェクトは扱いがなかなか難しいんですよね。その日時の操作をとっても簡単にすることができるライブラリ「Moment.js」の使い方について、解説をしていきます。- 日付&時刻の便利ライブラリ「Moment.js」をGoogle Apps Scriptで使う方法
- Google Apps ScriptでもMoment.jsで日付&時刻の書式フォーマットを簡単に指定
- Google Apps ScriptのMoment.jsで日時の各要素をGetとSetする方法
- GAS版Moment.jsライブラリで超簡単に日時の比較をする方法
- GASでMoment.jsライブラリを使って簡単に日時の計算をする方法
- GAS版Moment.jsの破壊的な日時計算メソッドの注意点とcloneメソッドによる回避
- GASでMoment.jsライブラリを使って超スマートに日時の差をとる方法
- Google Apps Scriptを使って80歳までの残り時間をChatworkに日々通知する