正确确定日期字符串是否为该格式的有效日期

我从API收到日期字符串,其格式为yyyy-mm-dd

我目前正在使用正则表达式来验证字符串格式,这种方法可以正常工作,但是我可以看到某些情况,根据字符串,它可能是正确的格式,但实际上是无效的日期。即2013-13-01,例如。

PHP中是否有更好的方法来接收诸如这样的字符串,2013-13-01并确定该日期是否为该格式的有效日期yyyy-mm-dd

回答:

您可以DateTime为此目的使用类:

function validateDate($date, $format = 'Y-m-d')

{

$d = DateTime::createFromFormat($format, $date);

// The Y ( 4 digits year ) returns TRUE for any integer with any number of digits so changing the comparison from == to === fixes the issue.

return $d && $d->format($format) === $date;

}


测试用例:

var_dump(validateDate('2013-13-01'));  // false

var_dump(validateDate('20132-13-01')); // false

var_dump(validateDate('2013-11-32')); // false

var_dump(validateDate('2012-2-25')); // false

var_dump(validateDate('2013-12-01')); // true

var_dump(validateDate('1970-12-01')); // true

var_dump(validateDate('2012-02-29')); // true

var_dump(validateDate('2012', 'Y')); // true

var_dump(validateDate('12012', 'Y')); // false

以上是 正确确定日期字符串是否为该格式的有效日期 的全部内容, 来源链接: utcz.com/qa/409800.html

回到顶部