Коли під рукою немає календаря, для того щоб визначити, який сьогодні день тижня, можна скористатися наступним алгоритмом:
1. Позначимо число, місяць і рік відповідно d, m і y.
2. Якщо m le- 2 (Тобто місяць січень або лютий), то рік зменшимо на 1, а число збільшимо на 3:
y: = y-1
d: = d + 3
3. Тепер номер дня тижня (w) Обчислюється за такою формулою:
w: = 1 + [d + y + y / 4 - y / 100 + y / 400 + (31m + 10) / 12] mod 7-
(Всі операції ділення - цілочисельні, тобто береться ціла частина частного- mod - операція отримання залишку від ділення).
Результатом буде ціле число в діапазоні від 1 до 7, відповідне днях тижня від неділі до суботи (1 - понеділок, 2 - вівторок, 3 - середа, 4 - четвер, 5 - п'ятниця, 6 - субота, 7 - неділя).
Даний алгоритм отриманий модифікацією широко відомого алгоритму вичсіленія дня тижня.
Переваги модифікованого алгоритму:
- не вимагає використання допоміжних змінних;
- зручний у мовах програмування, що використовують передачу параметрів за значенням;
- дає результат, відповідний російської традиції нумерації днів тижня, починаючи з понеділка.
Алгоритм працює в межах застосовності григоріанського календаря.
Приклади:
1. Поточна дата: 27.09.2009
d = 27;
m = 9;
y = 2009;
Оскільки m> 2, відразу переходимо до п.3
w = 1 + [27 + 2009 + 2009/4 - 2009/100 + 2009/400 + (31 * 9 + 10) / 12] mod 7 =
= 1 + [27 + 2009 + 502 - 20 + 5 + 24] mod 7 = 1 + 6 = 7 - Неділя.
2. Поточна дата: 31.01.1968
d = 31;
m = 1;
y = 1968;
Оскільки m le- 2, введемо корекцію:
y = 1967;
d = 34;
Тепер обчислюємо:
w = 1 + [34 + 1967 + 1967/4 - 1967/100 + 1967/400 + (31 * 1 + 10) / 12] mod 7 =
= 1 + [34 + 1967 + 491 - 19 + 4 + 3] mod 7 = 1 + 2 = 3 - Середа.
Посилання:
- Алгоритм обчислення дня тижня - Вікіпедія.
Додатково:
- Як за датою визначити день тижня?
- Що таке григоріанський календар?
- Чому в різні роки одна і та ж дата припадає на різні дні тижня?
- Де знайти астрономічний календар?
- Як самому розрахувати дату Пасхи?