Подтвердить что ты не робот

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

Ниже показано, как я ранее проверял даты. У меня также были свои функции для преобразования форматов даты, однако теперь я использую 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);
}
4b9b3361

Ответ 1

Вы можете попробовать следующее:

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 при ошибке.

UPDATE:

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

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

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;
}

Ответ 2

Вы можете проверить этот ресурс: 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();
}

Ответ 3

Попробуйте следующее:

  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);
  }

Ответ 4

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

function validateDate($date, $format = 'Y-m-d 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