Как компьютер определяет день недели для любой даты
Каждая дата с момента вступления в силу григорианского календаря имеет ровно один правильный день недели, и его можно вычислить только с помощью арифметики — никакого календарного приложения или таблицы поиска не требуется. В основе лежит та же самая идея, которая формализована с помощью сравнения Целлера и метода Сакамото: подсчитайте общее количество дней от известной контрольной точки, затем возьмите это значение по модулю 7, чтобы получить будний день.
Современное программное обеспечение не использует классическую формулу Целлера в буквальном смысле — оно обычно отслеживает количество дней, используя внутренний григорианский календарь — но результат математически идентичен тому, что вычисляют эти бумажные алгоритмы. Именно эта последовательность является причиной того, что этот калькулятор, бумажный альманах и математический трюк дают один и тот же ответ на одну и ту же дату.
Однодневная (или двухдневная) смена из года в год
Обычный год состоит из 365 дней — ровно 52 недель плюс один дополнительный день. Именно из-за этого оставшегося дня фиксированная дата, скажем, 4 июля, каждый год сдвигается ровно на один будний день вперед: в один год вторник, в следующий — среда и так далее.
Високосные годы нарушают эту устойчивую закономерность. Поскольку 29 февраля вставляется в середине года, любая дата, начиная с 1 марта, переносится на два рабочих дня вперед вместо одного по сравнению с предыдущим годом. Даты в январе и феврале не изменяются до тех пор, пока не пройдет високосный день.
На отметке века есть еще одна морщина: годы, делящиеся на 100, не являются високосными, если только они не делятся также на 400. Согласно этому правилу 2000 год был високосным годом; 1900 года не было, и 2100 тоже не будет — деталь, которая имеет значение, если вы рассчитываете дни недели далеко в прошлом или будущем.
Проверка дней недели на исторические даты
Поскольку день недели является фиксированным свойством самой даты, тот же самый расчет работает для проверки исторических записей — подтверждения задокументированного события, действительно произошедшего в тот день недели, о котором утверждает источник, или определения того, в какой день недели родился далекий предок.
Одно предостережение относительно дат до 1582 года: календарь, использовавшийся до григорианской реформы (юлианский календарь), работал по несколько иным правилам високосного года, поэтому расчеты дней недели для дат до этого переключения зависят от того, какой календарь использовался в самой исторической записи.
Помимо одной даты: события и количество дней в будние дни
Как только вы сможете вычислить день недели для одной даты, из той же математики выпадут еще три полезных вопроса:
- Next/previous occurrence — the closest date before or after a given day that falls on a specific weekday, useful for finding "the next Friday" from any starting point.
- Подсчет дней недели — сколько раз определенный день недели (скажем, понедельник) встречается в диапазоне дат. Это та же самая математика, что и при подсчете периодов оплаты или повторяющихся дат встреч.
- Найдите все вхождения — полный список всех дат, на которые попадает определенный день недели в заданном диапазоне, что удобно для планирования всего, что повторяется еженедельно.
Если вместо этого вам нужно точное количество дней между двумя датами или текущий обратный отсчет до целевой даты, Счетчик дней обрабатывает это напрямую. Чтобы добавить или вычесть годы, месяцы или недели из даты, см. Калькулятор даты.