みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
Google Apps Scriptで日付&時刻の便利ライブラリMoment.jsを使う方法についてお伝えしています。
前回の記事はこちらです。
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
- 元となるDateオブジェクトdateからgetMonthで「月」を取得
- 取得した「月」に1をプラスしたものをsetMonthでdateに再セット
こんな流れですね。
同様に、Dateオブジェクトで日時を減算する場合は
const date = new Date('2020/2/1'); const date2 = new Date(date.setDate(date.getDate() - 3)); //2020/1/29
- 元となるDateオブジェクトdateからgetDateで「日」を取得
- 取得した「日」に3をマイナスしたものをdateにsetDateで再セット
という流れです。
いずれもわからなくはないですが、日時の加算・減算なんてGASでは山ほど使いそうですから、わざわざgetしたり、setしたりせずに、スパっと書きたいものです。
また、加算・減算の対象となる要素ごとに、getFullYear、getMonth、getDate、…といったようにメソッドが変更になるのも煩わしいです。
addメソッドで日時を加算する
以上のような悩みもMoment.jsライブラリを使うことでスパっと解決することができます。
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メソッドを使い、次のように書きます。
使い方は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メソッドは、元のオブジェクト自体を変更してしまうという特性がありまして、次回はその点についてお伝えできればと思います。
どうぞお楽しみに!
連載目次: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に日々通知する
コメント
当頁初頭に、以下記述があります。
「 同様に、Dateオブジェクトで日時を減算する場合は
・・・
2. 取得した「日」に1をプラスしたものをdateに 」
これは、
「 同様に、Dateオブジェクトで日時を減算する場合は
・・・
2. 取得した「日」から3をマイナスしたものをdateに 」
が正しいように思います。単なる誤植でしょうね。
コメントありがとうございます!
おっしゃる通りですね…ご指摘助かります。
修正させていただきました。
今後ともどうぞよろしくお願いいたします。