Krok 5: dwa wyjątki algorytmu Gaussa
Kalendarz ze świętami, notatkami i językami - Kalendarz w JavaScript krok po kroku (JavaScript)
Tablice kościelne nie pozwalają, żeby Wielkanoc wypadła po 25 kwietnia, i nie powtarzają w cyklu tej samej daty pełni. Stąd dwa wyjątki: gdy `d = 29` i `e = 6`, Wielkanoc jest 19 kwietnia (a nie 26), a gdy `d = 28`, `e = 6` i `a > 10`, jest 18 kwietnia (a nie 25). W latach 1900-2099 dotyczy to tylko czterech lat; program pokazuje wynik bez wyjątków i z nimi.
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)}`;
// algorytm Gaussa (lata 1900-2099) bez wyjątków
function easterGauss(year) {
const a = year % 19;
const b = year % 4;
const c = year % 7;
const d = (19 * a + 24) % 30;
const e = (2 * b + 4 * c + 6 * d + 5) % 7;
return new Date(year, 2, 22 + d + e);
}
function easterGaussFixed(year) {
const a = year % 19;
const b = year % 4;
const c = year % 7;
const d = (19 * a + 24) % 30;
const e = (2 * b + 4 * c + 6 * d + 5) % 7;
if (d === 29 && e === 6) return new Date(year, 3, 19);
if (d === 28 && e === 6 && a > 10) return new Date(year, 3, 18);
return new Date(year, 2, 22 + d + e);
}
for (const year of [1954, 1981, 2026, 2049, 2076]) {
console.log(`${year}: bez wyjątków ${fmt(easterGauss(year))}, z wyjątkami ${fmt(easterGaussFixed(year))}`);
}Ł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.