GASでMoment.jsライブラリを使って簡単に日時の計算をする方法


date-calendar

photo credit: superscheeli calendar via photopin (license)

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

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

前回の記事はこちらです。

GAS版Moment.jsライブラリで超簡単に日時の比較をする方法
Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。今回はisSame、isBefore、isAfterメソッドで日時の比較をする方法です。

Moment.jsで二つの日時について比較をする方法についてお伝えしました。

今回は、加算と減算つまり日時の計算をしていきたいと思います。

Google Apps ScriptのMoment.jsライブラリで簡単に日時の計算をする方法です。

では、行ってみましょう!

スポンサーリンク

Dateオブジェクトの加算・減算

Dateオブジェクトで日時を加算するときは、このように書いていました。

const date = new Date('2020/2/1');
const date1 = new Date(date.setMonth(date.getMonth() + 1)); //2020/3/1
  1. 元となるDateオブジェクトdateからgetMonthで「月」を取得
  2. 取得した「月」に1をプラスしたものをsetMonthでdateに再セット

こんな流れですね。

同様に、Dateオブジェクトで日時を減算する場合は

const date = new Date('2020/2/1');
const date2 = new Date(date.setDate(date.getDate() - 3)); //2020/1/29
  1. 元となるDateオブジェクトdateからgetDateで「日」を取得
  2. 取得した「日」に3をマイナスしたものをdateにsetDateで再セット

という流れです。

いずれもわからなくはないですが、日時の加算・減算なんてGASでは山ほど使いそうですから、わざわざgetしたり、setしたりせずに、スパっと書きたいものです。

また、加算・減算の対象となる要素ごとに、getFullYear、getMonth、getDate、…といったようにメソッドが変更になるのも煩わしいです。

addメソッドで日時を加算する

以上のような悩みもMoment.jsライブラリを使うことでスパっと解決することができます。

momentオブジェクトで日時を加算する場合はaddメソッドを使い、次のように書きます。

momentオブジェクト.add(値, 要素を表す文字列)

例えば、先ほどの加算の例では以下のように書きます。

const m = Moment.moment('2020/2/1')
const m1 = m.add(1,'months'); //2020/3/1

簡単ですね!

要素を表す文字列とShorthand

要素を表す文字列Shorthandと呼ばれる短縮文字列でも表現できまして、以下のように書くこともできます。

const m = Moment.moment('2020/2/1')
const m1 = m.add(1,'M'); //2020/3/1

以下、文字列とShorthandを表にまとめますので、お好きなほうを使って下さいね。

要素 要素を表す文字列 Shorthand
years y
四半期 quarters Q
months M
weeks w
days d
hours h
minutes m
seconds s
ミリ秒 milliseconds ms

subtractメソッドで日時を減算する

では、続いて減算を紹介しますね。

momentオブジェクトで日時を減算する場合はsubtractメソッドを使い、次のように書きます。

momentオブジェクト.subtract(値, 要素を表す文字列)

使い方はaddメソッドとほぼ同じですね。要素を表す文字列もShorthandも同様です。

例えば、冒頭の減算の例はこうです。

const m = Moment.moment('2020/2/1')
const m2 = m.subtract(3,'days'); //2020/1/29

または、Shorthandを用いてこう書くこともできます。

const m = Moment.moment('2020/2/1')
const m2 = m.subtract(3,'d'); //2020/1/29

月末の日付に加算・減算をした場合

例えば、月を加算したとき、または減算したときに、計算結果の月の日数が31でない月の場合は、元の日付が存在していないケースがあります。

例えば2020/1/31にひと月加算した場合ですね。

この場合、どうなるかと言いますと、以下のようにいずれも月末日に揃います。

const m = Moment.moment('2020/1/31')
const m1 = m.add(1,'months'); //2020/2/29
var m = Moment.moment('2020/3/31')
var m2 = m.subtract(1,'months'); //2020/2/29

この特性も覚えておくとなかなか良さそうですよ。

まとめ

以上、Google Apps ScriptのMoment.jsライブラリで簡単に日時の計算をする方法です。

addメソッド、subtractメソッドの二つと、各要素の文字列またはShorthandさえ押さえてしまえば、日時の加減算もおてのものです。

いや~、Moment.jsライブラリさまさまですね。

さて、実はaddメソッド、subtractメソッドは、元のオブジェクト自体を変更してしまうという特性がありまして、次回はその点についてお伝えできればと思います。

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

どうぞお楽しみに!

連載目次: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. ginga red より:

    当頁初頭に、以下記述があります。
    「 同様に、Dateオブジェクトで日時を減算する場合は
     ・・・
    2. 取得した「日」に1をプラスしたものをdateに 」

    これは、
    「 同様に、Dateオブジェクトで日時を減算する場合は
     ・・・
    2. 取得した「日」から3をマイナスしたものをdateに 」

    が正しいように思います。単なる誤植でしょうね。

    • コメントありがとうございます!

      おっしゃる通りですね…ご指摘助かります。
      修正させていただきました。

      今後ともどうぞよろしくお願いいたします。

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