仕事で実際に使っていたのだが、なぜか「1ヶ月前」や「30日前」の日付がうまく取得できない。1ヶ月後なら大丈夫なのに…。
ちょっとハマったので、1ヶ月前や○日前の日付を正確に取得する方法を紹介する。
1ヶ月前(30日前)の日付を取得する
const today = '2016-08-24';
const thirtyDaysAgo = moment(today).day(-30).format();
// "2016-07-22T00:00:00+09:00"
moment(today).diff(thirtyDaysAgo, 'day');
// 33
moment().day(-30)をするとなぜか33日前になってしまった。どうやらマイナスの値を渡すと計算がおかしくなるようだ。
そこで、ちゃんと30日前を取得するためには、以下のような実装をする必要がある。
const today = '2016-08-24';
const thirtyDaysAgo = moment(today).add(-30, 'days').format();
// "2016-07-25T00:00:00+09:00"
// マイナスを使いたくない場合はsubtractでもOK
const thirtyDaysAgo = moment(today).subtract(30, 'days').format();
moment(today).diff(thirtyDaysAgo, 'day')
// 30
add(-30, 'days') または subtract(30, 'days') をすると、正確な日付が取得できる。
1ヶ月前なら add(-1, 'months') または subtract(1, 'months') となる。
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿