Алгоритм вычисления дня недели
Материал из Википедии — свободной энциклопедии
Существует довольно простой алгоритм вычисления дня недели для любой даты григорианского календаря позднее 1583 года. Григорианский календарь начал действовать в 1582 — после 4 октября сразу настало 15 октября.
Положим год — год, месяц — номер месяца, день — день, тогда
a = (14 − месяц) / 12 y = год − a m = месяц + 12 * a − 2 ДеньНедели = (7000 + (день + y + y / 4 − y / 100 + y / 400 + (31 * m) / 12)) ОСТАТОК 7
Все деления целочисленные (остаток отбрасывается).
Результат: 0 — воскресенье, 1 — понедельник и т. д.
[править] Реализации алгоритма
Для JavaScript код выглядит следующим образом:
function getDay(day,mon,year){ var days = new Array("воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"); day=parseInt(day); //если день двухсимвольный и <10 mon=parseInt(mon); //если месяц двухсимвольный и <10 var a=parseInt((14-mon)/12); var y=year-a; var m=mon+12*a-2; var d=(7000+parseInt(day+y+parseInt(y/4)-parseInt(y/100)+parseInt(y/400)+(31*m)/12))%7; return days[d]; }
cx@ukr.net
91.124.86.202 19:19, 3 марта 2008 (UTC)
Реализация на C:
/* ** taviscaron (c) */ struct struct_date { char day; char month; short year; }; char what_day(const struct struct_date * const date) { int a = (14 - date->month) / 12; int y = date->year - a; int m = date->month + 12 * a - 2; return (7000 + (date->day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12)) % 7; }

