edo1z blog

プログラミングなどに関するブログです

moment.jsのメモ - 日時が特定の期間内かを調べる

moment.jsで、日時が特定の期間内かを調べるときのやり方。 isBetweenというのがあったので使ってみた。でもこれは、同じだとfalseになるらしいので、1ミリ秒引いてみた。

サンプル

const yyyymmddThh = (y, m, d, h) => {
  const y0 = ('000' + y).slice(-4);
  const m0 = ('0' + m).slice(-2);
  const d0 = ('0' + d).slice(-2);
  const h0 = ('0' + h).slice(-2);
  return y0 + m0 + d0 + 'T' + h0;
};

const [year, month, date, hour] = [2019, 5, 19, 23];
const targetDate = yyyymmddThh(year, month, date, hour);
const dateFormat = 'YYYY-MM-DD HH:mm:ss';

const start = moment(targetDate);
console.log('Start:', start.format(dateFormat));
start.add(-1, 'ms');

const end = moment(targetDate).add(1, 'h');
console.log('End  :', end.format(dateFormat));

const testDate1 = moment('2019-05-19T23:00:00.00');
const testDate2 = moment('2019-05-19T23:53:47.46');
const testDate3 = moment('2019-05-20T00:00:00.00');

console.log(testDate1.isBetween(start, end));
console.log(testDate2.isBetween(start, end));
console.log(testDate3.isBetween(start, end));

結果

Start: 2019-05-19 23:00:00
End  : 2019-05-20 00:00:00
true
true
false

ちなみに、 end = start.add(1, 'h') とかやると、start自体も更新されますので、startの1時間後の値がstartとendに入ります。そうしたくないときは、下記のように、クローンを作ります。

end = moment(start).add(1, 'h')

momentjs.com