Дата для проверки следующая:
$submission_date = 12-25-2014; //The date in mm-dd-yyyy format that is to be tested against today's date
Теперь я хочу повторить сообщение об ошибке, поскольку дата содержится в переменной $submission_date
это будущая дата.
Как я должен сделать это эффективно и результативно с помощью PHP?
Заранее спасибо.
Есть много способов сделать это (например, использовать DateTime :: createFromFormat () для контроля точного формата входных дат), но, возможно, самый простой, который подходит для примера:
$isFuture = (strtotime($submission_date) > strtotime($_POST['current_date']))
Обратите внимание, что ОП изменил вопрос. Если нужной даты для проверки нет в массиве $ _POST, просто замените strtotime($_POST['current_date'])
с time()
использовать текущее системное время.
Для сравнения с текущей датой, независимо от времени суток, используйте:
$today = new DateTime(date("Y-m-d"));
// $today = new DateTime("today"); // better solution courtesy of Glavić
// see http://php.net/manual/en/datetime.formats.relative.php for more info
$today_timestamp = $today->getTimestamp();
Если опубликованный формат находится в m-d-Y
, то вы не можете конвертировать его в метку времени Unix напрямую с strtotime()
функция, потому что это вернусь false
.
Если вам нужно использовать strtotime()
затем изменить формат ввода на m/d/Y
простым str_replace()
.
С другой стороны, вы могли бы использовать DateTime
класс, где вы можете напрямую сравнивать объекты:
$submission_date = DateTime::createFromFormat('!m-d-Y', $submission_date);
$today_date = new DateTime('today');
if ($submission_date > $today_date) {
echo "submission_date is in the future\n";
}
С PHP DateTime Вы можете проверить, является ли введенная дата будущей или старой.
$submission_date = DateTime::createFromFormat('m-d-Y', $submission_date);
$submission_date = $submission_date->format('Y-m-d');
$current_date = new DateTime('today');
$current_date = $current_date->format('Y-m-d');
if ($submission_date > $current_date)
{
echo "Future date";
}
else
{
echo "Old date";
}