Содержание • • • • • • • • • • • • • • Описание алгоритма [ ] Существует довольно простой алгоритм вычисления дня недели для любой даты позднее года. Григорианский календарь начал действовать в — после 4 октября сразу настало 15 октября. Положим год — год, месяц — номер месяца, день — день, тогда a = (14 − месяц) / 12 y = год − a m = месяц + 12 * a − 2 ДеньНедели = (день + y + y / 4 − y / 100 + y / 400 + (31 * m) / 12) ОСТАТОК 7 Все деления целочисленные (остаток отбрасывается). Результат: 0 — воскресенье, 1 — понедельник и т. д. Реализации алгоритма [ ] [ ] Для Arduino IDE код выглядит следующим образом. =ОКРВНИЗ(ОСТАТ((ДЕНЬ(A2)+(ГОД(A2)-ОКРВНИЗ((14-МЕСЯЦ(A2))/12;1))+ОКРВНИЗ((ГОД(A2)-ОКРВНИЗ((14-МЕСЯЦ(A2))/12;1))/4;1)-ОКРВНИЗ((ГОД(A2)-ОКРВНИЗ((14-МЕСЯЦ(A2))/12;1))/100;1)+ОКРВНИЗ((ГОД(A2)-ОКРВНИЗ((14-МЕСЯЦ(A2))/12;1))/400;1)+ОКРВНИЗ(31*(МЕСЯЦ(A2)+12*ОКРВНИЗ((14-МЕСЯЦ(A2))/12;1)-2)/12;1));7);1) В ячейке А2 находится день календаря в формате даты. Результат выводится в виде номера дня недели(воскресение - 0) ЛИБО: (English): =CHOOSE(WEEKDAY(A1;2);'Monday';'Tuesday';'Wednesday';'Thursday';'Friday';'Saturday';'Sunday') (Русский): =ВЫБОР(ДЕНЬНЕД(A1;2);'Понедельник';'Вторник';'Среда';'Четверг';'Пятница';'Суббота;'Воскресенье') где А1 - это ваша ячейка с датой.
Скачал себе 'вечный календарь' ( ), при изменения года меняется календарь и выходные (суббота и воскресение) принадлежащие месяцу автоматически окрашиваются. Начал менять внешний вид, вместо вертикальных недель.
[ ] Реализация на Ruby.