Проверка допустимой даты с использованием PHP-класса DateTime

Ниже приведено то, как я ранее проверял даты. У меня также были свои собственные функции для преобразования форматов даты, однако теперь я использую PHP-класс DateTime, чтобы они больше не нуждались в них. Как лучше всего проверить действительную дату с помощью DataTime? Пожалуйста, дайте мне знать, считаете ли вы, что я должен использовать DataTime в первую очередь. благодаря

PS. Я использую Object oriented style, а не процедурный стиль.

static public function verifyDate($date) { //Given m/d/Y and returns date if valid, else NULL. $d=explode('/',$date); return ((isset($d[0])&&isset($d[1])&&isset($d[2]))?(checkdate($d[0],$d[1],$d[2])?$date:NULL):NULL); } 

Вы можете попробовать это:

 static public function verifyDate($date) { return (DateTime::createFromFormat('m/d/Y', $date) !== false); } 

Это выводит true / false. Вы можете напрямую вернуть объект DateTime :

 static public function verifyDate($date) { return DateTime::createFromFormat('m/d/Y', $date); } 

Затем вы возвращаете объект DateTime или false при ошибке.

ОБНОВИТЬ:

Спасибо Elvis Ciotti, который показал, что createFromFormat принимает недопустимые даты, такие как 45/45/2014. Дополнительная информация: https://stackoverflow.com/a/10120725/1948627

Я расширил метод с помощью строгой проверки:

 static public function verifyDate($date, $strict = true) { $dateTime = DateTime::createFromFormat('m/d/Y', $date); if ($strict) { $errors = DateTime::getLastErrors(); if (!empty($errors['warning_count'])) { return false; } } return $dateTime !== false; } 

Вы можете проверить этот ресурс: http://php.net/manual/en/datetime.getlasterrors.php

В кодах PHP указано:

 try { $date = new DateTime('asdfasdf'); } catch (Exception $e) { print_r(DateTime::getLastErrors()); // or echo $e->getMessage(); } 

Попробуй это:

  function is_valid_date($date,$format='dmY') { $f = DateTime::createFromFormat($format, $date); $valid = DateTime::getLastErrors(); return ($valid['warning_count']==0 and $valid['error_count']==0); } 

С помощью DateTime вы можете сделать кратчайший валидатор даты и времени для всех форматов.

 function validateDate($date, $format = 'Ymd H:i:s') { $d = DateTime::createFromFormat($format, $date); return $d && $d->format($format) == $date; } var_dump(validateDate('2012-02-28 12:12:12')); # true var_dump(validateDate('2012-02-30 12:12:12')); # false 

функция была скопирована из этого ответа или php.net