Алгоритм вычисления дня недели

Алгоритм вычисления дня недели

Алгоритм вычисления дня недели

Существует довольно простой алгоритм вычисления дня недели для любой даты григорианского календаря позднее 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];
}

Реализация на C:

struct struct_date
{
    char day;
    char month;
    short year;
};
 
int 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;
}

Реализация на Delphi:

function WhatDay(Year: Integer; Month: Integer; Day: Integer):integer;
var a,y,m: integer;
begin
 a := (14 - Month) div 12;
 y := year - a;
 m := month + 12 * a - 2;
 Result := (7000 + (day + y + y div 4 - y div 100 + y div 400 + (31 * m) div 12)) mod 7;
end;

Реализация на PHP:

function getDay($day, $mon, $year)
{
	$days = array("воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота");
	$day = (int)$day; //если день двухсимвольный и <10 
	$mon = (int)$mon; //если месяц двухсимвольный и <10 
	$a = (int)((14 - $mon) / 12);
	$y = $year - $a;
	$m = $mon + 12 * $a - 2;
	$d = (7000 + (int)($day+$y+ (int)($y/4) - (int)($y/100) + (int)($y/400) + (31*$m)/12))%7;
	return $days[$d];
}

Реализация в MS SQL:

CREATE FUNCTION [dbo].[getDay]( @date datetime ) RETURNS int AS BEGIN declare @a int declare @y int declare @m int

set @a = (14 - MONTH(@date)) / 12 set @y = YEAR(@date) - @a set @m = MONTH(@date) + 12*@a-2

return (7000 + (DAY(@date) + @y + @y / 4 - @y / 100 + @y / 400 + (31 * @m) / 12)) % 7

END

См. также

Ссылки


Wikimedia Foundation. 2010.

Смотреть что такое "Алгоритм вычисления дня недели" в других словарях:

  • Дни недели — Названия дней недели с римского периода были, с одной стороны, связаны с названиями семи планет классической астрономии, а с другой стороны, первым днём недели считалось воскресенье. Обе эти системы были приняты во многих языках, за некоторыми… …   Википедия

  • «Вечный» календарь — Вечный календарь  это матрица, позволяющая узнать, на какой день недели приходится любая дата в пределах длительного промежутка времени (как правило, нескольких десятков или сотен лет). Многие из вечных календарей фактически создают сетку… …   Википедия

  • Вечный календарь — Вечный календарь  календарь на широкий диапазон лет, предназначенный для определения дня недели. Многие из вечных календарей фактически создают сетку календаря на выбранный месяц выбранного года. Вечные календари могут также использоваться… …   Википедия

  • Список алгоритмов — Эта страница информационный список. Основная статья: Алгоритм Ниже приводится список алгоритмов, группированный по категориям. Более детальные сведения приводятся в списке структур данных и …   Википедия

  • Программируемые алгоритмы —       Служебный список статей, созданный для координации работ по развитию темы.   Данное предупреждение не устанавл …   Википедия

  • Астрариум — Астрариум, реконструированный итальянским мастером Карло Кроче по описаниям Джованни де Донди[1] Астрариум, так …   Википедия

  • Летнее время — Весенний перевод часовой стрелки с поясного на летнее время …   Википедия

  • 12-часовой формат времени — 24 часовой формат 12 часовой формат В устной речи 00:00 (полночь) 12:00* (полночь) Двенадцать (часов) ночи полночь 01:00   1:00 a.m. Час ночи 02:00   2:00 a.m. Два (часа) ночи 03:00   3:00 a.m. Три (часа) ночи 04:00… …   Википедия

  • Устный счёт — Устный счёт. В народной школе С. А. Рачинского. Николай Богданов Бельский. 1895 год. Устный счёт  математическ …   Википедия

  • Время суток — Сюда перенаправляется запрос «24 часовой формат времени». На эту тему нужна отдельная статья. Время суток  широко используемый на Земле способ исчисления времени, основанный на изменении положения солнца на небе, приблизительно являющемся… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»