PHP, проверить существует ли такая дата

у меня есть данный код

public function validationApiGetDataFromTo($from, $to)
    {
        if ($this->is_Date($from) === true and $this->is_Date($to) === true) {
            return true;
            //TODO существует ли такая дата
        }

        return false;
    }

    public function is_Date($str)
    {
        return is_numeric(strtotime($str));
    }

Но при таком вводе http://localhost/rest/all/V1/api/orders/?from=31.01.2020&to=2213213 мне нужно понять существует ли такая дата

как сделать правильную валидацию и также для разных форматов даты как y-m-d, y-d-m, 'd-m-y' и т.д


Ответы (1 шт):

Автор решения: Arsen

В вашем примере две неточности, во-первых вы проверяете на true === вы наверно забыли, что при таком сравнении едёт жёсткая типимизация. Всего то вам надо проверять на пустоту. В вашем примере вы меняете формат даты через strtotime() это правильно, но (во-вторых) нет смысла использовать is_numeric. Обратите внимание, если вы передаёте некорректную дату в данный метод, то она просто ничего не возращает. Можете попробовать так:

public function validationApiGetDataFromTo( $from, $to ) {
    if ( !empty( $this->is_Date( $from ) ) and !empty( $this->is_Date( $to ) ) {
            return true;

        } else {
            /*
             Одна(или оба) из значений некорректны
            */
        }

        return false;
    }


    public  function is_Date( $str ) {
        return strtotime( $str );
    }

и не важно каким форматом вы получаете дату, если она некорректна вы (т.е strtotime()) поймаете её :)

→ Ссылка