みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてシリーズでお伝えしています。
前回はコチラの記事でした。
破壊的なメソッドの注意点とcloneメソッドによる回避の方法についてお伝えしましたね。
今回は、Google Apps ScriptのMoment.jsライブラリのdiffメソッドを使って、二つの日時の差をとる方法です。
GASで実行時間を測定するときはもちろん、日数など単位が大きいときの差をとるのもスマートにできますよ。
では行ってみましょう!
Dateオブジェクトで日時の差をとる方法
Dateオブジェクトを使って日時の差をとる場合は、普通に引き算です。
とすれば、その差をとることができます。
例えば、とあるスクリプトの実行時間を測定したい場合は、以下のようにすればOKです。
function diffDate(){ const dateStart = new Date(); Utilities.sleep(3000); const dateEnd = new Date(); console.log(dateEnd - dateStart); }
まあ、これはこれでいい感じです。
ちなみに、consoleクラスのtimeメソッドとtimeEndメソッドを使う方法もありますので、それについては以下の記事をご参考ください。
Dateオブジェクトで差をとるとミリ秒単位
しかし、Dateオブジェクトで差をとった結果はミリ秒表記になってしまうので、実行時間が長い場合はちょっと分かりづらい。
それで、実行時間を秒にする場合には、前述のスクリプトの5行目を以下のように、1000分の1しますね。
console.log((dateEnd - dateStart) / 1000);
んー、まあいいんですが、ちょっとスマートではありません。
さらに、実行時間であれば1000分の1程度で済みますが、日単位にするときは以下のようになります。
function diffDate(){ const date = new Date(); const date2 = new Date('2020/1/1'); console.log((date - date2) / (1000 * 60 * 60 * 24)); }
とってもスマートではありません。
momentオブジェクトで日時の差をとる方法
momentオブジェクトで日時の差をとる場合は、diffメソッドを使います。
書き方はこうです。
これでmomentオブジェクト2とmomentオブジェクト1の差を、指定した単位で取得することができます。
単位ですが、以下の文字列またはShorthandで指定をします。省略をした場合はミリ秒となります。
単位 | 文字列 | Shorthand |
---|---|---|
年 | years | y |
月 | months | M |
週 | weeks | w |
日 | days | d |
時 | hours | h |
分 | minutes | m |
秒 | seconds | s |
ミリ秒 | milliseconds | ms |
浮動小数点にtrueを設定した場合は、浮動小数点で算出されます。falseを設定した場合、または省略をした場合は、小数点以下は切り捨てとなります。
momentオブジェクトで実行時間を測定する
momentオブジェクトで実行時間を測定する場合は、以下のようなスクリプトになります。
function diffMoment(){ const mStart = Moment.moment(); Utilities.sleep(3000); const mEnd = Moment.moment(); console.log(mEnd.diff(mStart)); }
秒単位かつ浮動小数点でログ出力したい場合は、5行目を以下のようにします。
console.log(mEnd.diff(mStart, 's', true));
なかなかスマートですよね。
momentオブジェクトで日数の差を求める
さらに、日数で差分をとるなど単位が大きくなるとdiffメソッドの本領発揮です。
日数単位であれば、第二引数を「d」に変えるだけ。
function diffMoment(){ const m = Moment.moment(); const m2 = Moment.moment('2020/1/1'); console.log(m.diff(m2, 'd')); }
これでOKです。とってもスマートですよね!
まとめ
Google Apps ScriptのMoment.jsライブラリのdiffメソッドで日時の差をスマートにとる方法についてお伝えしました。
GASは実行時間がシビアですからね…そして、単位が大きくなってもスマートに差分をとることができます。
オススメです!
次回ですが、実践編としてGAS版Moment.jsを活用して、80歳までの残り時間をChatworkに通知する機能を紹介します。
どうぞお楽しみに!
連載目次: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に日々通知する
コメント
diffがdeffになってますね、
にぽぽ様
コメントありがとうございます!
おっしゃる通りでした…ご指摘助かります。
修正をさせて頂きました。