使用 PHP 的 DateTime 类验证有效日期

2022-08-30 16:46:16

以下是我之前验证日期的方式。我也有自己的函数来转换日期格式,但是,现在使用PHP的DateTime类,所以不再需要它们。我应该如何使用 DataTime 最好地验证有效日期?也请让我知道你是否认为我应该首先使用DataTime。谢谢

PS. 我使用的是面向对象的样式,而不是程序样式。

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

答案 1

你可以试试这个:

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

这将输出真/假。您可以直接返回对象:DateTime

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

然后你得到一个对象或失败时假。DateTime

更新:

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

答案 2

使用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


推荐