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