Задать вопрос

Как написать рекурсивую функцию для вычесления рабочих дней?

Здравствуйте!
Никак не могу понять где ошибаюсь.
Пишу метод который выдаст последний рабочий день от текущей даты. То есть если например сегодня 7 января, метод должен вернуть 30 декабря 21 года.
И у меня почти получилось, однако:
Метод lastWorkingDay возвращает null. Самое странное при этом в том что если вместо return $day; ставлю var_dump($day); то в переменной $day лежит string 2021-12-31 почему тогда return null?
Сам код lastWorkingDay
public static function lastWorkingDay($day)
    {
        $date = new DateTime();
        $date->modify($day . '-1 day');
        $day = $date->format('Y-m-d');

        $weekend = static::is_weekend($day);
        if ($weekend === false) {
            return $day;
        }
        static::lastWorkingDay($day);
    }

И код is_weekend
public static function is_weekend($date)
    {
        $d = explode('-', $date);
        $url = 'http://xmlcalendar.ru/data/ru/' . $d[0] . '/calendar.json';
        $data = json_decode(file_get_contents($url));
        $m = (int) $d[1] - 1;
        $weekends = explode(',', $data->months[$m]->days);
        if (in_array($d[2], $weekends)) {
            return true;
        } 
        return false;
    }

Дата приходит в формате Y-m-d (2022-01-07)

Помогите найти ошибку.
  • Вопрос задан
  • 61 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
no_one_safe
@no_one_safe
public static function lastWorkingDay($day)
    {
        $date = new DateTime();
        $date->modify($day . '-1 day');
        $day = $date->format('Y-m-d');

        $weekend = static::is_weekend($day);
        if ($weekend === false) {
            return $day;
        }
        return static::lastWorkingDay($day);
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
FENIXPV
@FENIXPV Автор вопроса
Благодарю!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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