"Должно быть: Пятница", "1972-02-15" => "Должно быть: Вторник", "1990-03-11" => "Должно быть: Воскресенье", "2000-12-12" => "Должно быть: Втоорник", "2070-08-09" => "Должно быть: Суббота", "2080-07-02" => "Должно быть: Вторник", "2004-02-29" => "Должно быть: Воскресенье", "2025-01-01" => "Должно быть: Среда", "1985-09-16" => "Должно быть: Понедельник", "2090-07-02" => "Должно быть: Воскресенье", "2099-07-01" => "Должно быть: Среда", "2150-11-25" => "Должно быть: Среда", "1821-01-01" => "Должно быть: Понедельник", "2250-01-01" => "Должно быть: Вторник", "1000-01-01" => "Должно быть: Среда", "950-12-03" => "Должно быть: Четверг", "500-01-03" => "Должно быть: Воскресенье", "3000-08-18" => "Должно быть: Понедельник", "450-12-15" => "Должно быть: Четверг", "1655-12-12" => "Должно быть: Воскресенье", "1300-01-01" => "Должно быть: Пятница", "1970-02-11" => "Должно быть: Среда", "1970-06-20" => "Должно быть: Субота", ]; function ShowDayOfTheWeek($array) { $arrDate = explode("-", $array);//Разбиваем строку на, элементы массива $starting = 0;//начальная дата отсчета $current = 0;//заданный год if ($arrDate[0] < 1970) {//в зависимости от года, в переменные подставляются разные значения $starting = 1970; $current = $arrDate[0]; } else { $starting = $arrDate[0]; $current = 1970; } $dayYear = ($starting - $current) * 365;//Считаем отдельно количество лет, прошедших с 1970 $dayMonth = 0;//Инициализируем переменную switch ($arrDate[1]) {//Считаем количество дней, в месяце плюс указанное количество дней case 1; $dayMonth = ($arrDate[2] - 1); break; case 2; $dayMonth = 31 + ($arrDate[2] - 1); break; case 3; $dayMonth = 59 + ($arrDate[2] - 1); break; case 4; $dayMonth = 90 + ($arrDate[2] - 1); break; case 5; $dayMonth = 120 + ($arrDate[2] - 1); break; case 6; $dayMonth = 151 + ($arrDate[2] - 1); break; case 7; $dayMonth = 181 + ($arrDate[2] - 1); break; case 8; $dayMonth = 212 + ($arrDate[2] - 1); break; case 9; $dayMonth = 243 + ($arrDate[2] - 1); break; case 10; $dayMonth = 273 + ($arrDate[2] - 1); break; case 11; $dayMonth = 304 + ($arrDate[2] - 1); break; case 12; $dayMonth = 334 + ($arrDate[2] - 1); break; } $leapDay = 0;//инициализируем переменную, для подсчета высокосных дней $year = array(); $lastleap = 0; for ($k = $current; $k <= $starting; $k++) {//проходим в цикле от 1970 дня до указанной даты if (($k % 4 == 0 && $k % 100 != 0) || ($k % 400 == 0)) {//если год соотвецтвует этим условиям, значит он высокосный $leapDay += 1; $lastleap = $k;//присваиваем переменной lastleap; первый встречающийся высокосный год $year[] = $k;//присваиваем переменной year последний встречающийся высокосный год } } if ($arrDate[0] < 1970) {//В зависимости от года, присваиваем значения $leapYear = $year[0]; } else { $leapYear = $lastleap; } if ($arrDate[0] == $leapYear) {// если заданный год высокосный, то заходим в цикл if ($dayMonth < 59) {//до 28 февраля, мы не добавляем лишний день в году $dayMonth = $dayMonth - 1; } elseif ($arrDate[1] == 02 && $arrDate[2] == 29) {//если заданный день равен 29 февраля, то отнимаем один день $dayMonth = $dayMonth - 1; } } if ($arrDate[0] < 1970) { $sumDay = (($dayYear - $dayMonth) + $leapDay);//находим общую сумму дней от 1970 до указанной даты } else { $sumDay = (($dayYear + $dayMonth) + $leapDay);//находим общую сумму дней от указанной даты до 1970 } //Делим общее количество дней на 7, если оно делится без остатка, то это первый день недели в нашем списке, // если остаток 1, то второй и так далее if ($arrDate[0] < 1970) { switch ($sumDay % 7) { case 0; echo "Четверг "; break; case 1; echo "Среда "; break; case 2; echo "Вторник "; break; case 3; echo "Понедельник "; break; case 4; echo "Воскресенье "; break; case 5; echo "Субота "; break; case 6; echo "Пятница "; break; } } else { //Делим общее количество дней на 7, если оно делится без остатка, то это первый день недели в нашем списке, // если остаток 1, то второй и так далее switch ($sumDay % 7) { case 0; echo "Четверг "; break; case 1; echo "Пятница "; break; case 2; echo "Суббота "; break; case 3; echo "Воскресенье "; break; case 4; echo "Понедельник "; break; case 5; echo "Вторник "; break; case 6; echo "Среда "; break; } } } function testResult($array) { foreach ($array as $key => $item) { echo $key . " " . $item . " " . ShowDayOfTheWeek($key) . "
"; } } testResult($arrTest);