我从 API 收到一个日期字符串,其格式为yyyy-mm-dd
.
我目前正在使用正则表达式来验证字符串格式,该格式工作正常,但我可以看到在某些情况下,根据字符串它可能是正确的格式,但实际上是无效的日期。 IE。2013-13-01
, 例如。
PHP 中有没有更好的方法来获取字符串,例如2013-13-01
并判断它是否是格式有效的日期yyyy-mm-dd
?
您可以使用DateTime::createFromFormat() https://www.php.net/manual/en/datetime.createfromformat.php以此目的:
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;
}
[Function taken from this answer https://stackoverflow.com/a/12323025/67332. Also on php.net http://www.php.net/manual/en/function.checkdate.php#113205. Originally written by Glavić https://stackoverflow.com/users/67332.]
测试用例:
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
Demo! https://eval.in/53309
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)