GAS版Moment.jsライブラリで超簡単に日時の比較をする方法


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。

前回の記事はコチラ。

Google Apps ScriptのMoment.jsで日時の各要素をGetとSetする方法
Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。今回はmomentオブジェクトから各要素を取得する方法、またセットする方法です。

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オブジェクトには年月日だけでなく、時分秒の要素も含まれているので、年月日が等しいかどうかを判定したい場合は、このように表現せざるを得ないのです。

んー、スマートじゃないですよね…

【GAS】定期的に発生するタスクをチャットワークに自動でタスク追加(完全版)
チャットワークのタスク機能ですが、定期のタスク追加は面倒ですよね。今回はGoogle Apps Scriptで毎月、毎週、毎日の定期タスクを自動でチャットワークに追加するプログラムを作成します。

isSameメソッドでmomentオブジェクトが等しいか判定する

これが、momentオブジェクトだと、超スッキリ表現ができます。

二つのmomentオブジェクトの要素が等しいかどうかは、momentオブジェクトにisSameメソッドを使いまして、このように書きます。

momentオブジェクト.isSame(日付, 要素を表す文字列)

日付はいくつかの指定の仕方がありまして

・momentオブジェクト
・Dateオブジェクト
・日時を表す文字列
・配列 ※例:[2020, 2, 3, 12, 0, 0] ※monthは0~11の値
・UNIX時間×1000

のいずれかで指定します。

要素を表す文字列は

・year
・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ライブラリで日時の加算・減算をする方法についてお伝えしたいと思います。

GASでMoment.jsライブラリを使って簡単に日時の計算をする方法
Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。今回はmomentオブジェクトによる日時の加算・減算についてお伝えしていきます。

どうぞお楽しみに!

連載目次:Google Apps ScriptでMoment.jsを使う

Google Apps Scriptでよく取り扱う日付と時刻。しかし、JavaScriptの標準Dateオブジェクトは扱いがなかなか難しいんですよね。その日時の操作をとっても簡単にすることができるライブラリ「Moment.js」の使い方について、解説をしていきます。
  1. 日付&時刻の便利ライブラリ「Moment.js」をGoogle Apps Scriptで使う方法
  2. Google Apps ScriptでもMoment.jsで日付&時刻の書式フォーマットを簡単に指定
  3. Google Apps ScriptのMoment.jsで日時の各要素をGetとSetする方法
  4. GAS版Moment.jsライブラリで超簡単に日時の比較をする方法
  5. GASでMoment.jsライブラリを使って簡単に日時の計算をする方法
  6. GAS版Moment.jsの破壊的な日時計算メソッドの注意点とcloneメソッドによる回避
  7. GASでMoment.jsライブラリを使って超スマートに日時の差をとる方法
  8. Google Apps Scriptを使って80歳までの残り時間をChatworkに日々通知する

タイトルとURLをコピーしました