Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $arrTest = [
- //Тест кейсы
- "2016-01-01" => "Должно быть: Пятница",
- "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)
- {
- foreach ($array as $date => $value) {//проходим по массиву и поочередно подставляем значения
- $arrDate = explode("-", $date);//Разбиваем строку на, элементы массива
- $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] == $leapYear) {// если заданный год высокосный, то заходим в цикл
- }
- 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 $date . "__" . "Четверг -" . $value . "<br>";
- break;
- case 1;
- echo $date . "__" . "Среда -" . $value . "<br>";
- break;
- case 2;
- echo $date . "__" . "Вторник -" . $value . "<br>";
- break;
- case 3;
- echo $date . "__" . "Понедельник -" . $value . "<br>";
- break;
- case 4;
- echo $date . "__" . "Воскресенье -" . $value . "<br>";
- break;
- case 5;
- echo $date . "__" . "Субота -" . $value . "<br>";
- break;
- case 6;
- echo $date . "__" . "Пятница -" . $value . "<br>";
- break;
- }
- } else {
- //Делим общее количество дней на 7, если оно делится без остатка, то это первый день недели в нашем списке,
- // если остаток 1, то второй и так далее
- switch ($sumDay % 7) {
- case 0;
- echo $date . "__" . "Четверг -" . $value . "<br>";
- break;
- case 1;
- echo $date . "__" . "Пятница -" . $value . "<br>";
- break;
- case 2;
- echo $date . "__" . "Суббота -" . $value . "<br>";
- break;
- case 3;
- echo $date . "__" . "Воскресенье -" . $value . "<br>";
- break;
- case 4;
- echo $date . "__" . "Понедельник -" . $value . "<br>";
- break;
- case 5;
- echo $date . "__" . "Вторник -" . $value . "<br>";
- break;
- case 6;
- echo $date . "__" . "Среда -" . $value . "<br>";
- break;
- }
- }
- }
- }
- ShowDayOfTheWeek($arrTest);//вызываем функцию, с тестовыми значениями
Advertisement
Add Comment
Please, Sign In to add comment