Correctly determine if date string is a valid date in that format
You can use DateTime::createFromFormat()
for this purpose:
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. Also on php.net. Originally written by Glavić.]
Test cases:
var_dump(validateDate('2013-13-01')); // falsevar_dump(validateDate('20132-13-01')); // falsevar_dump(validateDate('2013-11-32')); // falsevar_dump(validateDate('2012-2-25')); // falsevar_dump(validateDate('2013-12-01')); // truevar_dump(validateDate('1970-12-01')); // truevar_dump(validateDate('2012-02-29')); // truevar_dump(validateDate('2012', 'Y')); // truevar_dump(validateDate('12012', 'Y')); // false