PHP - дата валидации в формате д / м / г - PullRequest
0 голосов
/ 11 мая 2018

Я импортирую даты из CSV, для которого требуется, чтобы формат был d / m / Y, например: 20/4 / 1999.

Как я могу проверить, что пользователи вводят его правильно, а не m / d /Да, например: 4/20 / 1999.

Я пытался использовать следующее, но в обоих случаях он возвращает false

function validateDateFormats(string $date, string $format='d/m/Y')
    {
        $d = DateTime::createFromFormat($format, $date);
        return $d && $d->format($format) == $date;
    }

var_dump(validateDateFormats('20/4/1999'));
var_dump(validateDateFormats('4/20/1999'));

Вышеприведенная функция возвращает true для «04/20/1999».Но есть ли способ сделать так, чтобы он возвращал истину и для «20.04.1999»?

Эти даты должны возвращать истину: 20/4/1999, 20/04/1999

Эти даты должны возвращать ложь: 20.04.1999, 4/20/1991

Спасибо

1 Ответ

0 голосов
/ 11 мая 2018
 function validateDateFormats(string $date, string $format='d/m/Y')
    {
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) == $date;
    }

var_dump(validateDateFormats('20/4/1999'));
var_dump(validateDateFormats('4/20/1999'));

Вышеуказанная функция возвращает true для '04/20/1999'. Но есть ли способ сделать так, чтобы оно вернулось и для «20.04.1999»?

С Руководство по PHP :

m Числовое представление месяца с ведущими нулями от 01 до 12
n Числовое представление месяца без начальных нулей от 1 до 12

Поэтому как насчет var_dump(validateDateFormats('4/20/1999','n/d/Y'));?

Посмотрите на функцию и увидите, что второй аргумент дает вам формат даты, необходимый для возврата true, поэтому все, что вам нужно сделать, это применить строку format в вашей функции, чтобы изменить m на n.

Таким образом:

$date = "4/20/2019";
if( validateDateFormats($date, 'm/d/Y')
    ||  validateDateFormats($date, 'n/d/Y') ){
    print "This date is valid."; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...