paul paul - 13 hours ago 2
PHP Question

PHP DateTime credit card expiration

I'm trying to use DateTime to check if a credit card expiry date has expired but I'm a bit lost.

I only want to compare the mm/yy date.

Here is my code so far

$expmonth = $_POST['expMonth']; //e.g 08
$expyear = $_POST['expYear']; //e.g 15

$rawExpiry = $expmonth . $expyear;

$expiryDateTime = \DateTime::createFromFormat('my', $rawExpiry);
$expiryDate = $expiryDateTime->format('m y');

$currentDateTime = new \DateTime();
$currentDate = $currentDateTime->format('m y');

if ($expiryDate < $currentDate) {
echo 'Expired';
} else {
echo 'Valid';
}


I feel i'm almost there but the if statement is producing incorrect results. Any help would be appreciated.

Answer

It's simpler than you think. The format of the datess you are working with is not important as PHP does the comparison internally.

$expires = \DateTime::createFromFormat('my', $_POST['expMonth'].$_POST['expYear']);
$now     = new \DateTime();

if ($expires < $now) {
    // expired
}