@MichaelWinogradow

Алгоритм который определяет день недели по заданому числу вида дд.мм.год?

Нужно разработать алгоритм который определяет день недели.Условие: в каждом месяце по 28 дней.Когда год високосный в феврале 29 дней. Год будет считается високосным если он кратен 5, но из тех что кратны 100 високосными будут только те, что кратны 500. Например 200, 300, 400 - не високосный, 500 - високосный.Известно что 1 января 1000 года это был понедельник. Я пытался адаптировать под эти условия алгоритм Томохико Сакамото, но к сожалению мой алгоритм не правильно вычисляет день недели.
function day_of_the_week(d, m, y)
{
    let arr = [ 0, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 ];
    if (m < 3)
        y -= 1;
    let res = Math.round((y + y / 5 - y / 100 + y / 500 + arr[m - 1] + d) % 7);
    	switch (res)
		{
			case 0 :
			console.log("Sunday");
			break;

			case 1 :
				console.log("Monday");
				break;

			case 2 :
				console.log("Tuesday");
				break;

			case 3 :
				console.log("Wednesday");
				break;

			case 4 :
				console.log("Thursday");
				break;

			case 5 :
				console.log("Friday");
				break;

			case 6 :
				console.log("Saturday");
				break;
		}
}
day_of_the_week(10, 01, 1001)
  • Вопрос задан
  • 213 просмотров
Пригласить эксперта
Ответы на вопрос 3
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
let today = new Date();
console.log('Понедельник: 1, суббота: 6, воскресенье: 0', today.getDay());
Ответ написан
Yobanaris
@Yobanaris
Учусь отвечая.
Вот и ответочка

function dayofweek(d, m, y)
{
    let t = [ 0, 0,0,0,0,0,0,0,0,0,0,0];
    y -= (m < 3) ? 1 : 0;
    return ( y + y/5- y/100 + y/500 + t[m-1] + d) % 7;
}
    let days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
    let day = dayofweek (01, 01, 1000);
    let weekday = Math.round(day);
    if (weekday == 1) {
    newweekday = days[0];
    }else if (weekday == 2){
    newweekday = days[1];
    }else if (weekday == 3){
    newweekday = days[2];
    }else if (weekday == 4){
    newweekday = days[3];
    }else if (weekday == 5){
    newweekday = days[4];
    }else if (weekday == 6){
    newweekday = days[5];
    }else if (weekday == 7){
    newweekday = days[6];
    }
    console.log(newweekday);
Ответ написан
Adamos
@Adamos
Условие про 28 дней в месяце очень удобное. Оно означает, что невисокосный год не смещает дни недели между аналогичными датами. Так что для определения, каким днем было 1 января нужного года, достаточно подсчитать, сколько високосных лет было между ним и тысячным годом. А потом уже дойти до нужной даты (опять-таки при 28 днях в месяце каждое первое число - один и тот же день, и только в високосном с марта добавляется 1 день относительно января).
Я бы делал это не одной формулой, а именно в две стадии - проще проверять. Ну, и необходимо учесть, что сам 1000 год - високосный, так что 1 января 1001 года - вторник.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы