Krok 4: dzień tygodnia wzorem zamiast pętli

Kalendarz ze świętami, notatkami i językami - Kalendarz w JavaScript krok po kroku (JavaScript)

Gauss liczy dni od pełni do niedzieli bez pętli. Dzień tygodnia przesuwa się co rok o 1, a w roku przestępnym o 2, stąd `b = year % 4` i `c = year % 7`. Wzór `e = (2b + 4c + 6d + 5) % 7` daje liczbę dni od dnia po pełni do niedzieli (0-6), więc Wielkanoc to `22 + d + e` marca. Program liczy obie wersje i porównuje je.

const WEEKDAYS = ['niedziela', 'poniedziałek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota'];
const pad = n => String(n).padStart(2, '0');
const fmt = date => `${pad(date.getDate())}.${pad(date.getMonth() + 1)}`;
for (let year = 2024; year <= 2030; year++) {
  const a = year % 19; // miejsce roku w 19-letnim cyklu Księżyca
  const d = (19 * a + 24) % 30; // ile dni po 21 marca wypada wiosenna pełnia
  const fullMoon = new Date(year, 2, 21 + d); // marzec, nadmiar dni przechodzi na kwiecień
  const sunday = new Date(fullMoon);
  do {
    sunday.setDate(sunday.getDate() + 1);
  } while (sunday.getDay() !== 0);
  const b = year % 4;
  const c = year % 7;
  const e = (2 * b + 4 * c + 6 * d + 5) % 7; // dni od dnia po pełni do niedzieli
  const formula = new Date(year, 2, 22 + d + e);
  const same = formula.getTime() === sunday.getTime() ? 'zgodne' : 'RÓŻNE';
  console.log(`${year}: pętla ${fmt(sunday)}, wzór ${fmt(formula)} (e = ${e}), ${same}`);
}

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu Kalendarz w JavaScript krok po kroku·Zaloguj się, aby zapisać postęp na koncie.