protected function card_date_parser($a, $type)
{
// Strip out any slash
$date = str_replace('/', '', $a);
// Check that we have 4 digits
if (!preg_match('|^[0-9]{4}$|', $date)) {
return false;
}
$month = substr($date, 0, 2);
$year = substr($date, 2, 2);
// Check month is logical
if ($month > 12) {
return false;
}
$parts = array(date('Y'), date('m'), 1);
$now_datetime = new DateTime(implode('-', $parts));
$parts = array('20' . $year, $month, '1');
$card_datetime = new DateTime(implode('-', $parts));
$interval = $now_datetime->diff($card_datetime);
$days = $interval->format('%R%a days');
if ($type == 'from') {
// Check from date is older or equal to current month
if ($days <= 0 && $days > -3650) {
return true;
} else {
return false;
}
} elseif ($type == 'to') {
// Check to date is newer or equal to current month
if ($days >= 0 && $days < 3650) {
return true;
} else {
return false;
}
} else {
$msg = "Bad date type '{$type}' in card-date validation";
throw new Error($msg);
}
}