Quantcast
Channel: いつも隣にITのお仕事
Viewing all articles
Browse latest Browse all 2076

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

$
0
0
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

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

例えば、とあるスクリプトの実行時間を測定したい場合は

function diffDate(){
  var dateStart = new Date();  
  //処理
  var dateEnd = new Date();
  Logger.log(dateEnd-dateStart);
}

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

Dateオブジェクトで差をとるとミリ秒単位

しかし、Dateオブジェクトで差をとった結果はミリ秒表記になってしまうので、実行時間が長い場合はちょっと分かりづらい。

それで、実行時間を秒にする場合には、前述のスクリプトの5行目を

Logger.log((dateEnd-dateStart)/1000);

というように、1000分の1しますね。んー、まあいいんですが、ちょっとスマートではありません。

さらに、実行時間であれば1000分の1程度で済みますが、日単位にするときは

function diffDate(){

  var date = new Date();
  var date2 = new Date('2017/1/1');

  Logger.log((date-date2)/(1000*60*60*24));
}

ということになります。とってもスマートではありません。

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

momentオブジェクトで日時の差をとる場合は、diffメソッドを使います。

書き方はこうです。

momentオブジェクト2.deff(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(){
  var mStart = Moment.moment();
  '処理
  var mEnd = Moment.moment();
  Logger.log(mEnd.diff(mStart));
}

秒単位かつ浮動小数点でログ出力したい場合は、5行目を

Logger.log(mEnd.diff(mStart, 's', true));

とします。なかなかスマートですよね。

momentオブジェクトで日数の差を求める

さらに、日数で差分をとるなど単位が大きくなるとdiffメソッドの本領発揮です。

日数単位であれば、第二引数を「d」に変えるだけ。

function diffMoment(){
  var m = Moment.moment();
  var m2 = Moment.moment('2017/1/1');

  Logger.log(m.diff(m2, 'd'));
}

これでOKです。とってもスマートですよね!

まとめ

Google Apps ScriptのMoment.jsライブラリのdiffメソッドで日時の差をスマートにとる方法についてお伝えしました。

GASは実行時間がシビアですからね…そして、単位が大きくなってもスマートに差分をとることができます。

オススメです!

連載目次: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ライブラリを使って超スマートに日時の差をとる方法

Viewing all articles
Browse latest Browse all 2076

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>