Date liczy za nas i funkcja printMonth
Praktyka: kalendarz - JavaScript od podstaw: konsola (JavaScript)
Ręczne przesunięcie było dobre na jeden miesiąc. Obiekt `Date` zna kalendarz: `new Date(rok, miesiąc - 1, 1)` to pierwszy dzień miesiąca (miesiące w `Date` liczone są od 0!), a `getDay()` zwraca dzień tygodnia, ale z niedzielą jako 0. Wzór `(getDay() + 6) % 7` przestawia to na poniedziałek = 0. Liczbę dni daje sztuczka: dzień 0 NASTĘPNEGO miesiąca to ostatni dzień bieżącego. Całość trafia do funkcji, więc kalendarz dowolnego miesiąca to jedno wywołanie. Wynik dla listopada jest taki sam jak wcześniej.
const MONTHS = ['styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec',
'lipiec', 'sierpień', 'wrzesień', 'październik', 'listopad', 'grudzień'];
function printMonth(year, month) {
const offset = (new Date(year, month - 1, 1).getDay() + 6) % 7;
const days = new Date(year, month, 0).getDate();
console.log(`${MONTHS[month - 1]} ${year}`);
console.log('Pn Wt Śr Cz Pt So Nd');
let row = ' '.repeat(offset);
let column = offset;
for (let d = 1; d <= days; d++) {
row += String(d).padStart(2) + ' ';
column++;
if (column === 7) {
console.log(row);
row = '';
column = 0;
}
}
if (row !== '') console.log(row);
}
printMonth(2026, 11);
printMonth(2028, 2);Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.
Wszystkie lekcje kursu JavaScript od podstaw: konsola·Zaloguj się, aby zapisać postęp na koncie.