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

Здравствуйте!
Никак не могу понять где ошибаюсь.
Пишу метод который выдаст последний рабочий день от текущей даты. То есть если например сегодня 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
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 Автор вопроса
Благодарю!
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы