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.