Yuki's bnb blog

こんにちは!Yukiといいます。本業のかたわら大阪で2016年夏から民泊運営のお手伝いをしています。民泊業務に関する様々なことを自動化・効率化したいと思い日々活動しています。 お気軽にコメント・お問い合わせください :) TOEICスコア 985

【簡単!GAS】Moment.jsで二つの日付&時刻の差分を計算しよう

f:id:yukibnb:20190815103156p:plain

こんにちは!
Yuki (@yukibnb) です。

前回Moment.jsを使ってGoogle Apps Scriptで簡単に日付や時刻を計算する方法を紹介しました。「今日の日付に〇日足すと△月◇日になる」という計算です。
www.yukibnb.com


今回は二つの日付や時刻の差分を取る方法を紹介します。「△月◇日から■月▼日までの日数」という計算です。


こんな時に使える!

  • 今日は結婚記念日から何日後?
  • 今日は会社創業日から何年後?
  • 今日はキャンペーンを開始してから何日後?
  • △月◇日と■月▼日は何日間離れている?

では具体的なコードを見ていきましょう!

Moment.jsでの差分を取る方法 & 使用できる要素

シンプルな公式

まず先にサンプルコードを確認しましょう。もし今日が結婚記念日から何日経ったか知りたい場合、以下のようにコードを書きます。(結婚記念日を2015年4月17日と仮定します)

var date01 = Moment.moment(); //現在日時
var date02 = Moment.moment("2015年4月17日","YYYY年M月D日"); //結婚記念日
var difference = date01.diff(date02,"days"); // ←ここで差分を計算

Logger.log(difference); //ログを確認すると日数が表示されます

次に今日ではなく、「△月◇日と■月▼日は◎日間離れている」かを知りたい場合、以下のようにコードを書きます。

var date01 = Moment.moment("2019年8月5日","YYYY年M月D日"); //日付その1
var date02 = Moment.moment("2019年4月17日","YYYY年M月D日"); //日付その2
var difference = date01.diff(date02,"days"); // ←ここで差分を計算

Logger.log(difference); //ログを確認すると日数が表示されます


先にサンプルコードを見るとイメージしやすいですね!では公式を見てみましょう。

公式

momentオブジェクトその1.diff(momentオブジェクトその2, "要素");

momentオブジェクト」とはサンプルコード内の「var date01 = Moment.moment("2019年8月5日","YYYY年M月D日");」や「var date02 = Moment.moment("2019年4月17日","YYYY年M月D日");」などです。

diff」は「difference (差)」のことです。

要素」は調べたい単位を入力します。例えば二つの日付の間の日数を調べたい時は要素に「days」を、年数を調べたい時は要素に「years」を入力します。

なお差分の計算イメージは「momentオブジェクトその1 引く momentオブジェクトその2」です。momentオブジェクトその1がその2より過去の場合、結果はマイナスになります。

以下のような例です。

//結果がプラスになる
var date01 = Moment.moment("2019年8月5日","YYYY年M月D日"); //日付その1
var date02 = Moment.moment("2019年4月17日","YYYY年M月D日"); //日付その2
var difference = date01.diff(date02,"days"); // ←ここで差分を計算
Logger.log(difference); //結果は110

//結果がマイナスになる
var date01 = Moment.moment("2019年4月17日","YYYY年M月D日"); //日付その1
var date02 = Moment.moment("2019年8月5日","YYYY年M月D日"); //日付その2
var difference = date01.diff(date02,"days"); // ←
Logger.log(difference); //結果は-110

 

使用できる要素一覧

計算に使用できる要素はこれだけあります。

要素 簡略表記 内容
years
y
months
M
weeks
w
days
d
hours
h
minutes
m
seconds
s
milliseconds
ms
ミリ秒

ちなみにmonthsやdaysなど要素が長くて書くのが面倒な場合、代わりに簡略表記を使用できます

例えば冒頭で紹介した今日と結婚記念日の差分を取るコードは以下のように書くこともできます。

var date01 = Moment.moment(); //現在日時
var date02 = Moment.moment("2015年4月17日","YYYY年M月D日"); //結婚記念日
var difference = date01.diff(date02,"d"); // ←簡略表記"d"を使用

Logger.log(difference); //ログを確認すると日数が表示されます

簡略表記の大文字と小文字は区別されるのでご注意ください。

 

差分を取る方法のサンプルコード紹介

実際にどのような活用法があるかサンプルコードを交えて紹介します。

なおこの記事だけでは書ききれませんので、是非皆さんご自身で色々試してみてください。

年数の差分を取る

□年△月◇日から今日までの年数

var date01 = Moment.moment(); //現在日時
var date02 = Moment.moment("1998年1月9日","YYYY年M月D日"); //□年△月◇日
var difference = date01.diff(date02,"years"); // ←ここで差分を計算

Logger.log(difference); //ログを確認する年数が表示されます

 
□年△月◇日から◆年■月▼日までの年数

var date01 = Moment.moment("1987年11月19日","YYYY年M月D日"); //◆年■月▼日
var date02 = Moment.moment("1835年2月10日","YYYY年M月D日"); //□年△月◇日
var difference = date01.diff(date02,"years"); // ←ここで差分を計算

Logger.log(difference); //ログを確認すると年数が表示されます

 

日数の差分を取る

□年△月◇日から今日までの日数

var date01 = Moment.moment(); //現在日時
var date02 = Moment.moment("2018年10月13日","YYYY年M月D日"); //□年△月◇日
var difference = date01.diff(date02,"days"); // ←ここで差分を計算

Logger.log(difference); //ログを確認すると日数が表示されます

 
□年△月◇日から◆年■月▼日までの日数

var date01 = Moment.moment("2019年7月29日","YYYY年M月D日"); //◆年■月▼日
var date02 = Moment.moment("2018年10月13日","YYYY年M月D日"); //□年△月◇日
var difference = date01.diff(date02,"days"); // ←ここで差分を計算

Logger.log(difference); //ログを確認すると日数が表示されます

 

時間数の差分を取る

□年△月◇日〇時▽分から今日までの時間数

var date01 = Moment.moment(); //現在日時
var date02 = Moment.moment("2019年8月12日19時32分","YYYY年M月D日HH時mm分"); //□年△月◇日〇時▽分
var difference = date01.diff(date02,"hours"); // ←ここで差分を計算

Logger.log(difference); //ログを確認する時間数が表示されます

 
□年△月◇日〇時▽分から◆年■月▼日▲時▶分までの時間数

var date01 = Moment.moment("2019年8月14日8時49分","YYYY年M月D日HH時mm分"); //◆年■月▼日▲時▶分
var date02 = Moment.moment("2019年8月12日19時32分","YYYY年M月D日HH時mm分"); //□年△月◇日〇時▽分
var difference = date01.diff(date02,"hours"); // ←ここで差分を計算

Logger.log(difference); //ログを確認すると時間数が表示されます

 

分数の差分を取る

□年△月◇日〇時▽分から今日までの分数

var date01 = Moment.moment(); //現在日時
var date02 = Moment.moment("2019年8月12日19時32分","YYYY年M月D日HH時mm分"); //□年△月◇日〇時▽分
var difference = date01.diff(date02,"minutes"); // ←ここで差分を計算

Logger.log(difference); //ログを確認する分数が表示されます

 
□年△月◇日〇時▽分から◆年■月▼日▲時▶分までの分数

var date01 = Moment.moment("2019年8月14日8時49分","YYYY年M月D日HH時mm分"); //◆年■月▼日▲時▶分
var date02 = Moment.moment("2019年8月12日19時32分","YYYY年M月D日HH時mm分"); //□年△月◇日〇時▽分
var difference = date01.diff(date02,"minutes"); // ←ここで差分を計算

Logger.log(difference); //ログを確認すると分数が表示されます

 

秒数の差分を取る

□年△月◇日〇時▽分□秒から今日までの秒数

var date01 = Moment.moment(); //現在日時
var date02 = Moment.moment("2019年8月12日19時32分5秒","YYYY年M月D日HH時mm分ss秒"); //□年△月◇日〇時▽分□秒
var difference = date01.diff(date02,"seconds"); // ←ここで差分を計算

Logger.log(difference); //ログを確認する秒数が表示されます

 
□年△月◇日〇時▽分□秒から◆年■月▼日▲時▶分●秒までの秒数

var date01 = Moment.moment("2019年8月13日7時49分22秒","YYYY年M月D日HH時mm分ss秒"); //◆年■月▼日▲時▶分●秒
var date02 = Moment.moment("2019年8月12日19時32分5秒","YYYY年M月D日HH時mm分ss秒"); //□年△月◇日〇時▽分□秒
var difference = date01.diff(date02,"seconds"); // ←ここで差分を計算

Logger.log(difference); //ログを確認すると秒数が表示されます

 

補足

小数点まで求めたい場合

今まで紹介した方法は小数点以下は自動的に切り捨てて差分が表示されました。

もし小数点まで表示させたい場合、以下の公式を使用します。

公式

momentオブジェクトその1.diff(momentオブジェクトその2, "要素", true);

「true」を付けるだけでOKです。

試しに以下の二つのコードを比べてみましょう。

//小数点なし
var date01 = Moment.moment("2019年8月10日","YYYY年M月D日");
var date02 = Moment.moment("2012年10月5日","YYYY年M月D日");
var difference01 = date01.diff(date02,"years"); // ←trueなし

Logger.log(difference01); //「6.0」と表示される

//小数点あり
var date03 = Moment.moment("2019年8月10日","YYYY年M月D日");
var date04 = Moment.moment("2012年10月5日","YYYY年M月D日");
var difference02 = date01.diff(date02,"years",true); // ←trueあり

Logger.log(difference02); //「6.846774193548387」と表示される

 

まとめ

今回はGASでMoment.jsライブラリーを使用し、二つの日付や時刻の差分を計算する方法を紹介しました。

頭の中で差分を計算するのは難しいですがMoment.jsを使用すれば簡単に計算できます。是非さまざまな場面で活用頂けるとうれしいです!