今回は、指定された年月のカレンダーをコンソール上に表示するプログラムを作成しました。
もし年月が指定されない場合、現在の年月が使用されます。
この処理の中心として、Luxonという日付・時刻操作のためのライブラリと、コマンドライン引数を簡単に扱えるminimistが利用されています。
1. 必要なモジュールのインストール
$ npm install luxon minimist
2. 引数の受け取り
- ユーザーが指定する年や月を簡単に取得するために
minimist
を利用。指定がない場合は、現在の年月をデフォルトとして取得。
3.カレンダーの出力
- 指定された年月の初日と最終日を
luxon
で取得し、日付を順に出力。
ここで、月の初日が火曜日や水曜日など、日曜日以外の場合に、適切なスペースを空けるためにString.prototype.repeat()
メソッドを使用。(指定された回数だけ文字列を繰り返すことができる。)
#!/usr/bin/env node
const { DateTime } = require("luxon");
const args = require("minimist")(process.argv.slice(2));
const year = args.y ? parseInt(args.y, 10) : DateTime.local().year;
const month = args.m ? parseInt(args.m, 10) : DateTime.local().month;
const startOfMonth = DateTime.local(year, month, 1);
const endOfMonth = startOfMonth.endOf("month");
let calendarOutput = "";
calendarOutput += ` ${startOfMonth.monthLong}月 ${startOfMonth.year} \n`;
calendarOutput += "日 月 火 水 木 金 土\n";
calendarOutput += " ".repeat(startOfMonth.weekday % 7);
for (let i = startOfMonth; i <= endOfMonth; i = i.plus({ days: 1 })) {
calendarOutput += i.day.toString().padStart(2, " ");
if (i.weekday === 6) {
calendarOutput += "\n";
} else {
calendarOutput += " ";
}
}
process.stdout.write(calendarOutput + "\n");
4. 使い方
- プログラムを実行する際、年や月を指定してカレンダーを表示できる。
$ node calendar.js -y 2023 -m 8
指定しない場合、現在の年月のカレンダーが表示される。
$ node calendar.js