PHP что-то не так с моей проверкой даты - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь проверить дату в типе ввода = "дата" в формате dmY.Дата не может быть выше, чем сегодня.Я конвертирую разницу в числах, а затем спрашиваю, меньше ли число 0.

Вот моя функция проверки:

public static function validateDate($date){
    $dateToday = date_create(date('d-m-Y'));
    $datetime = date_create($date);
    if(date_diff($dateToday, $datetime)->format('%a') < 0){
        return false;
    }
    else{
        return true;
    }
}

Функция не работает.пользователь может выбрать любую дату в будущем, и она отправляется прямо в БД в виде ГГГГ-ММ-ДД.

Я довольно потерян, любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 08 декабря 2018

Для начала, это, вероятно, плохой ход:

$dateToday = date_create(date('d-m-Y'));

Это плохо, потому что и дата, и месяц имеют 2 цифры.Хотя он может на самом деле дать вам ожидаемый результат, он выглядит нелогичным для американских кодеров, потому что даты здесь обычно пишутся как mdY.Я бы предложил date("F j, Y"), который является более понятным форматом даты: var_dump(date("F j, Y")); // outputs "December 8, 2018" Во-вторых, вы не проводите проверку параметра $ date, предоставленного вашей функции.Предположительно, это строка в формате dmY, и вы должны применить ее с некоторой проверкой.

Наконец, вы %a форматер, который вы указываете в этой строке, просто предоставляет цифры разницы дат ... он не указывает, является ли это положительной разницей или минус разница .:

if(date_diff($dateToday, $datetime)->format('%a') < 0){
    //blah blah blah
}

Вам также необходимо включить флаг формата %R, чтобы получить +/- разницы:

if(date_diff($dateToday, $datetime)->format('%R%a') < 0){
    //blah blah blah
}

Инаконец, начиная с PHP 5.2.2. вы можете просто сравнивать объекты даты, созданные с помощью оператора сравнения.Это лучше, чем ваш код, который сравнивает строку с нулем.Попробуйте эту функцию:

public static function validateDate($date){
    if (!preg_match('/^\d{2}-\d{2}-\d{4}$/', $date)) {
            throw new Exception("$date is not a valid date in d-m-Y format");
    }
    $today = date_create(date("Y-m-d"));
    $datetime = date_create($date);

    if ($datetime > $today) {
            return false;
    } else {
            return true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...