Jak ustalić dzień tygodnia na podstawie daty używając Algorytmu Zellera?

1

Cześć,

Potrzebuję stworzyć mechanizm w systemie CRM (bitrix24), który będzie mi zwracać jaki mamy dzień tygodnia, gdyż tam nie ma takiej funkcji. Postanowiłem wspomóc się wikipedią i skorzystałem z Algorytmu Zellera:

nr dnia tygodnia = ([23m/9] + d + 4 + y + [z/4] + [z/100] + [z/400] - c) mod 7
gdzie
[ ] oznacza część całkowitą liczby
mod – funkcja modulo (reszta z dzielenia)
m – (ang. month) numer miesiąca (od stycznia = 1 do grudnia = 12)
d – (ang. day) numer dnia miesiąca
y – (ang. year) rok
z – rok z poprawką: z = y - 1 jeżeli m < 3; z = y, jeżeli m >= 3
c – (ang. correction) korekta: c = 0, jeżeli m < 3; c = 2, jeżeli m >= 3
nr dnia tygodnia należy przeliczać następująco: 0 – niedziela, 1 – poniedziałek, 2 – wtorek, 3 – środa, 4 – czwartek, 5 – piątek, 6 – sobota.Dodaj cytat...

Jako test ustawiłem datę 04/01/2023 (4 stycznia 2023).
Wyniki dla poszczególnych zmiennych:
m=1
d=4
y=2023
z=2022
c=0, więc

nr dnia tygodnia = (2 + 4 + 4 + 2023 + 505 + 20 + 5 - 0) mod 7
nr dnia tygodnia = (2563) mod 7
Wynik: 1 (poniedziałek).

Czy może robię coś źle, czy wzór jest błędny?

3

y oraz z muszą być modulo 100, bo to jest algorytm stuletni. Powinieneś zrobić y=23 oraz z=22.

Tutaj masz przykłady kodu w C++, Pythonie, JS, Javie i C#: https://www.geeksforgeeks.org/zellers-congruence-find-day-date/

0

Dzięki, działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1