Node.js で時間や日付をうまく扱う date-fns ライブラリで明日や次の平日を扱うメモ

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 と取得できています。

もちろん、土日をスキップするだけなので祝日は考慮されませんが、ありがたい機能です。

毎日くらいなら自前の計算でもできなくもないんですが、次の平日となると、次の日が土日かどうかを毎度チェックせねばなりません。

そうすると、それなりにややこしい処理が増えるので、正確に計算するのであれば、任せたほうが、他のところに注力できるので、助かるやつです!