PHP Forms
Validating Form Input: Dates and Times
Problem
You want to make sure that a date or time a user entered is valid. For example, you want to ensure that a user hasn’t attempted to schedule an event for the 45th of August or provided a credit card that has already expired.
Solution
Example Checking a particular date
if (! checkdate($_POST['month'], $_POST['day'], $_POST['year'])) {
print "The date you entered doesn't exist!";
}
To check that a date is before or after a particular value, convert the user-supplied values to a timestamp, compute the timestamp for the threshhold date, and compare the two.
Example Checking credit card expiration
// The beginning of the month in which the credit card expires
$expires = mktime(0, 0, 0, $_POST['month'], 1, $_POST['year']);
// The beginning of the previous month
$lastMonth = strtotime('last month', $expires);
if (time() > $lastMonth) {
print "Sorry, that credit card expires too soon.";
}
Discussion
The checkdate() function is handy because it knows about leap year and how many days are in each month, saving you from tedious comparisons of each component of the date. For range validations—making sure a date or time is before, after, or between other dates or times—it’s easiest to work with epoch timestamps.
No comments:
Post a Comment