Node.js で時間や日付をうまく扱う date-fns ライブラリで明日や次の平日を扱うメモです。
この記事は 2022年 ゆるくすすめる ( ワンフットシーバス ) | GWアドベントカレンダー の 5/6 8日目の記事でもあります。
date-fns 使ってます
Node.js date-fns ライブラリを使って February 28, 2022 at 08:45AM な表記をパースするメモ
以前も date-fns ライブラリを使って表記のパースを行いましたが、その後もいろいろ使っています。
その中でも、繰り返し日程を計算するときに使う「明日」や「次の平日」が直感的で扱いやすいです。
ドキュメントも親切。
まずは明日を扱う
addDays に使い方が書いてあります。
const addDays = require('date-fns/addDays'); const parse = require('date-fns/parse'); // UTC の 2022-05-06 取得 const sampleDay = parse('2022-05-06 00:00:00Z', 'yyyy-MM-dd HH:mm:ssX', new Date()); // UTC として明日として 1 日加える const nextDay = addDays( sampleDay , 1 ); // 2022-05-07T00:00:00.000Z console.log(nextDay);
UTC の 2022-05-06 を取得したいがための parse 対応の方が手間がかかっていますが、とにもかくにも、addDays の第一引数で Date 型を指定、第二引数で何日加えるかを指定します。今回は明日なので 1 日加えて、無事 2022-05-07T00:00:00.000Z
と取得できています。
まずは次の平日を扱う
addBusinessDays に使い方が書いてあります。
const addBusinessDays = require('date-fns/addBusinessDays'); const parse = require('date-fns/parse'); // UTC の 2022-05-06 取得 const sampleDay = parse('2022-05-06 00:00:00Z', 'yyyy-MM-dd HH:mm:ssX', new Date()); // UTC として平日の次の日として 1 日加える const nextDay = addBusinessDays( sampleDay , 1 ); // 2022-05-09T00:00:00.000Z // 5/9 月曜日 console.log(nextDay);
addBusinessDays も同様です。第一引数で Date 型を指定、第二引数で平日の何日加えるかを指定します。今回は平日の次の日なので 1 日加えて、無事、週明け月曜日の 5/9 2022-05-09T00:00:00.000Z
と取得できています。
もちろん、土日をスキップするだけなので祝日は考慮されませんが、ありがたい機能です。
毎日くらいなら自前の計算でもできなくもないんですが、次の平日となると、次の日が土日かどうかを毎度チェックせねばなりません。
そうすると、それなりにややこしい処理が増えるので、正確に計算するのであれば、任せたほうが、他のところに注力できるので、助かるやつです!