GASでMoment.jsライブラリを使って超スマートに日時の差をとる方法


difference

photo credit: frankieleon Which chose you? via photopin (license)

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

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

前回はコチラの記事でした。

GAS版Moment.jsの破壊的な日時計算メソッドの注意点とcloneメソッドによる回避
Google Apps Scriptで日付&時刻のライブラリMoment.jsを紹介しています。日時計算の際に元のmomentオブジェクトが変更されてしまうので、cloneメソッドで回避する方法をお伝えします。

破壊的なメソッドの注意点とcloneメソッドによる回避の方法についてお伝えしましたね。

今回は、Google Apps ScriptのMoment.jsライブラリのdiffメソッドを使って、二つの日時の差をとる方法です。

GASで実行時間を測定するときはもちろん、日数など単位が大きいときの差をとるのもスマートにできますよ。

では行ってみましょう!

スポンサーリンク

Dateオブジェクトで日時の差をとる方法

Dateオブジェクトを使って日時の差をとる場合は、普通に引き算です。

Dateオブジェクト2 – Dateオブジェクト1

とすれば、その差をとることができます。

例えば、とあるスクリプトの実行時間を測定したい場合は、以下のようにすればOKです。

function diffDate(){

  const dateStart = new Date();  
  Utilities.sleep(3000);
  const dateEnd = new Date();
  console.log(dateEnd - dateStart);

}

まあ、これはこれでいい感じです。

ちなみに、consoleクラスのtimeメソッドとtimeEndメソッドを使う方法もありますので、それについては以下の記事をご参考ください。

GASのconsoleクラスのメソッドで実行時間をログ出力する方法
GASでconsoleクラスを使ってApps Scriptダッシュボードにログを出力する方法を伝えしています。今回はGASのconsoleクラスのメソッドで実行時間をログ出力する方法を紹介します。

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.diff(momentオブジェクト1, 単位, 浮動小数点)

これで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を使って80歳までの残り時間をChatworkに日々通知する
来年までの残り時間、日数、月数と、人生(80歳として)の時間、日数、月数をChatworkに通知する機能を、Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使って実践します。

どうぞお楽しみに!

連載目次: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に日々通知する

コメント

  1. にぽぽ より:

    diffがdeffになってますね、

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