Moment.js

Moment.jsの日時計算メソッドを使うときの注意点

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');

date1target_dateから1ヶ月、date2target_dateから2ヶ月の値が入っているはずだが、date2date1から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オブジェクトが破壊されなくて済む。

ABOUT ME
ytakeuchi
都内在住のフロントエンドエンジニア。2016年からフリーランスとして活動中。座右の銘は「昨日よりも楽に」。好きな言葉は「効率化」。こんな性格なのでプライベートではGoogle Apps Scriptばかり触っています。