Correctly determine if date string is a valid date in that format Correctly determine if date string is a valid date in that format php php

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

Demo!


Determine if any string is a date

function checkIsAValidDate($myDateString){    return (bool)strtotime($myDateString);}


Use in simple way with php prebuilt function:

function checkmydate($date) {  $tempDate = explode('-', $date);  // checkdate(month, day, year)  return checkdate($tempDate[1], $tempDate[2], $tempDate[0]);}

Test

   checkmydate('2015-12-01'); //true   checkmydate('2015-14-04'); //false