はじめに
前回、Rubyで表題と同じ内容のプログラムを作成しましたが、JavaScriptでも書いてみたのでメモ書きとして残しておくことにします。
アウトプット
ターミナルで、対象のディレクトリにてnode calender.js -m ${1-12}
と実行すると、対象月のカレンダーを表示することができました。
なお、前回(Rubyのコード)からの変更点は以下の通りです。
- すべて日本語で表示(前回:すべて英語)
- カレンダーは日曜始まり(前回:月曜始まり)
コード
コード作成時の考え方や詳細な説明は、前回(Rubyのコード)の記事で解説しているため割愛します。
JavaScript特有の重要な点については、以下にまとめておきます。
calendar.js
const showCalendar = (month) => {
let startDate = new Date(2024, month - 1, 1);
let endDate = new Date(2024, month, 0);
process.stdout.write(` ${month}月 2024年 \n`);
process.stdout.write('日 月 火 水 木 金 土\n');
let weekdayIndex = startDate.getDay();
let spaces = ' '.repeat(weekdayIndex);
process.stdout.write(`${spaces}`);
for (let day = startDate.getDate(); day <= endDate.getDate(); day++) {
let tempDate = new Date(2024, month - 1, day);
process.stdout.write(day.toString().padStart(2, ' ') + ' ');
if (tempDate.getDay() === 6) {
process.stdout.write('\n');
}
}
process.stdout.write('\n');
};
let selectedMonth = new Date().getMonth() + 1;
let args = process.argv.slice(2);
let monthArgIndex = args.indexOf('-m');
if (monthArgIndex !== -1 && args[monthArgIndex + 1]) {
selectedMonth = parseInt(args[monthArgIndex + 1], 10);
}
if (selectedMonth < 1 || selectedMonth > 12) {
console.log(`${selectedMonth} is neither a month number (1..12) nor a name`);
} else {
showCalendar(selectedMonth);
}
-
let startDate = new Date(2024, month - 1, 1);
- Dateオブジェクトが月を0から11で扱うため、
-1
とする
- Dateオブジェクトが月を0から11で扱うため、
-
process.stdout.write
- 改行のタイミングを任意に調整したいため、上記メソッドを利用する
おわりに
今回の気づきとしては、前回はRubyで本プログラムを作成しましたがJavaScriptで作成しても基本的なプログラム作成時の考え方は同じで書き方が微妙に異なるだけでした。
ただ、それぞれの書き方を正確に把握していなかったため、混乱し少々作成に時間がかかってしまいました。
引き続き学習を続けていきます。