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.