GASでのMoment.jsを使った日時計算は便利だけど、たまに使うと忘れているのでメモ…
状況
今日の日付から1ヶ月後と2ヶ月後を取得したい
const target_date = Moment.moment();
//1ヶ月後
const date1 = target_date.add(1,'months');
//2ヶ月後
const date2 = target_date.add(2,'months');
date1
にtarget_date
から1ヶ月、date2
にtarget_date
から2ヶ月の値が入っているはずだが、date2
にdate1
から2ヶ月の値が入ってしまっている
原因
Moment.jsライブラリのaddメソッド
、subtractメソッド
は元のDateオブジェクト自体を変更してしまう「破壊的メソッド」だから。
対策
cloneメソッド
でmomentオブジェクトのクローンを作って元の変数を上書きしないようにする
function calcDate(){
const target_date = Moment.moment();
//1ヶ月後
const date1 = target_date.clone().add(1,'months');
//2ヶ月後
const date2 = target_date.clone().add(2,'months');
}
cloneメソッド
でコピーしたものに対してaddメソッド
、subtractメソッド
を実行すれば、元のmomentオブジェクトが破壊されなくて済む。