Для начала, это, вероятно, плохой ход:
$dateToday = date_create(date('d-m-Y'));
Это плохо, потому что и дата, и месяц имеют 2 цифры.Хотя он может на самом деле дать вам ожидаемый результат, он выглядит нелогичным для американских кодеров, потому что даты здесь обычно пишутся как mdY.Я бы предложил date("F j, Y")
, который является более понятным форматом даты:
var_dump(date("F j, Y")); // outputs "December 8, 2018"
Во-вторых, вы не проводите проверку параметра $ date, предоставленного вашей функции.Предположительно, это строка в формате dmY, и вы должны применить ее с некоторой проверкой.
Наконец, вы %a
форматер, который вы указываете в этой строке, просто предоставляет цифры разницы дат ... он не указывает, является ли это положительной разницей или минус разница .:
if(date_diff($dateToday, $datetime)->format('%a') < 0){
//blah blah blah
}
Вам также необходимо включить флаг формата %R
, чтобы получить +/- разницы:
if(date_diff($dateToday, $datetime)->format('%R%a') < 0){
//blah blah blah
}
Инаконец, начиная с PHP 5.2.2. вы можете просто сравнивать объекты даты, созданные с помощью оператора сравнения.Это лучше, чем ваш код, который сравнивает строку с нулем.Попробуйте эту функцию:
public static function validateDate($date){
if (!preg_match('/^\d{2}-\d{2}-\d{4}$/', $date)) {
throw new Exception("$date is not a valid date in d-m-Y format");
}
$today = date_create(date("Y-m-d"));
$datetime = date_create($date);
if ($datetime > $today) {
return false;
} else {
return true;
}
}