The 5th Annual China PHP Conference


(PHP 4, PHP 5, PHP 7)

checkdateValidate a Gregorian date


bool checkdate ( int $month , int $day , int $year )

Checks the validity of the date formed by the arguments. A date is considered valid if each parameter is properly defined.



The month is between 1 and 12 inclusive.


The day is within the allowed number of days for the given month. Leap years are taken into consideration.


The year is between 1 and 32767 inclusive.

Return Values

Returns TRUE if the date given is valid; otherwise returns FALSE.


Example #1 checkdate() example


The above example will output:


See Also

  • mktime() - Get Unix timestamp for a date
  • strtotime() - Parse about any English textual datetime description into a Unix timestamp

add a note add a note

User Contributed Notes 3 notes

glavic at gmail dot com
3 years ago
With DateTime you can make the shortest date&time validator for all formats.


function validateDate($date, $format = 'Y-m-d H:i:s')
$d = DateTime::createFromFormat($format, $date);
$d && $d->format($format) == $date;

var_dump(validateDate('2012-02-28 12:12:12')); # true
var_dump(validateDate('2012-02-30 12:12:12')); # false
var_dump(validateDate('2012-02-28', 'Y-m-d')); # true
var_dump(validateDate('28/02/2012', 'd/m/Y')); # true
var_dump(validateDate('30/02/2012', 'd/m/Y')); # false
var_dump(validateDate('14:50', 'H:i')); # true
var_dump(validateDate('14:77', 'H:i')); # false
var_dump(validateDate(14, 'H')); # true
var_dump(validateDate('14', 'H')); # true

var_dump(validateDate('2012-02-28T12:12:12+02:00', 'Y-m-d\TH:i:sP')); # true
# or
var_dump(validateDate('2012-02-28T12:12:12+02:00', DateTime::ATOM)); # true

var_dump(validateDate('Tue, 28 Feb 2012 12:12:12 +0200', 'D, d M Y H:i:s O')); # true
# or
var_dump(validateDate('Tue, 28 Feb 2012 12:12:12 +0200', DateTime::RSS)); # true
var_dump(validateDate('Tue, 27 Feb 2012 12:12:12 +0200', DateTime::RSS)); # false
# ...
2 months ago

In the example you gave, it is correctly returning false. The function example is comparing a string to a known date format. I suggest reading the documentation on the date format to see why you're making the wrong assumption.
whitej71 at msu dot edu
10 months ago
The below suggested date validation (from another note) does NOT work for ALL formats and date inputs.

function validateDate($date, $format = 'Y-m-d H:i:s')
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) == $date;

A couple of examples should suffice as a warning to test carefully and particularly not to use code that allows passing in of just any date format string:

var_dump(validateDate('7/01/16', 'n/j/y')); # false but should be true
var_dump(validateDate('7/1/16', 'm/d/y')); # false but should be true

Sorry, I don't have a suggested correction.
To Top