
photo credit: frankieleon Which chose you? via photopin (license)
みなさん、こんにちは!
タカハシ(@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になってますね、
にぽぽ様
コメントありがとうございます!
おっしゃる通りでした…ご指摘助かります。
修正をさせて頂きました。