3.8. Validating a Date
Problem
You want to check if a date is valid. For example, you want to make sure a user hasn’t provided a birthdate such as February 30, 1962.
Solution
Use checkdate( ):
$valid = checkdate($month,$day,$year);
Discussion
The function checkdate( )
returns true if $month is
between 1 and 12, $year is between 1 and 32767,
and $day is between 1 and the correct maximum
number of days for $month and
$year. Leap years are correctly handled by
checkdate( ), and dates are rendered using the
Gregorian calendar.
Because checkdate( ) has such a broad range of
valid years, you should do additional validation on user input if,
for example, you’re expecting a valid birthdate.
The Guinness Book of World Records says the
oldest person ever reached 122. To check that a birthdate indicates a
user between 18 and 122 years old, use the
pc_checkbirthdate( )
function shown in Example 3-1.
Example 3-1. pc_checkbirthdate( )
function pc_checkbirthdate($month,$day,$year) { $min_age = 18; $max_age = 122; if (! checkdate($month,$day,$year)) { return false; } list($this_year,$this_month,$this_day) = explode(',',date('Y,m,d')); $min_year = $this_year - $max_age; $max_year = $this_year - $min_age; print "$min_year,$max_year,$month,$day,$year\n"; if (($year > $min_year) && ($year < $max_year)) { return true; } elseif (($year == $max_year) && (($month < $this_month) || (($month == $this_month) && ($day <= $this_day)))) { return true; } elseif (($year == $min_year) && (($month > $this_month) ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access