正确确定日期字符串是否为该格式的有效日期
我从 API 收到一个日期字符串,它被格式化为 .yyyy-mm-dd
我目前正在使用正则表达式来验证字符串格式,这工作正常,但我可以看到在某些情况下,根据字符串,它可能是正确的格式,但实际上是无效的日期。即,例如。2013-13-01
在PHP中,有没有更好的方法来获取一个字符串,例如并判断它是否是该格式的有效日期?2013-13-01
yyyy-mm-dd
我从 API 收到一个日期字符串,它被格式化为 .yyyy-mm-dd
我目前正在使用正则表达式来验证字符串格式,这工作正常,但我可以看到在某些情况下,根据字符串,它可能是正确的格式,但实际上是无效的日期。即,例如。2013-13-01
在PHP中,有没有更好的方法来获取一个字符串,例如并判断它是否是该格式的有效日期?2013-13-01
yyyy-mm-dd
您可以使用 DateTime::createFromFormat()
来实现此目的:
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;
}
[从这个答案中获取的功能。也在 php.net。最初由Glavić撰写。]
测试用例:
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
确定是否有任何字符串是日期
function checkIsAValidDate($myDateString){
return (bool)strtotime($myDateString);
}