Как проверить, не превышает ли дата в массиве $ _POST сегодняшнюю дату в PHP?

0

Дата, которую необходимо проверить, следующая:

$submission_date = 12-25-2014; //The date in mm-dd-yyyy format that is to be tested against today date

Теперь я хочу повторить сообщение об ошибке, поскольку дата, содержащаяся в переменной $submission_date является датой в будущем.

Как я должен делать это эффективно и эффективно с помощью PHP?

Заранее спасибо.

  • 0
    Вы можете превратить будущие данные в timestamp и сравнить полученную timestamp с текущей. Готово
  • 2
    Пожалуйста, не переходите на другой вопрос, потому что другие уже нашли время, чтобы ответить! Просто откройте новый вопрос, если это необходимо.
Показать ещё 1 комментарий
Теги:
arrays
date
date-comparison

3 ответа

1

Если опубликованный формат находится в mdY, то вы не можете преобразовать его в unix timestamp напрямую с strtotime() функции 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";
}

demo

  • 0
    @Glvic спасибо
1

Многие способы сделать это (например, использовать 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();
  • 0
    Я изменил свой вопрос. Теперь нет даты в качестве текущей даты в массиве $ _POST?
  • 1
    @PHPLover Это другой вопрос. Его ответ отвечает на ваш вопрос
Показать ещё 14 комментариев
0

С помощью PHP DateTime вы можете проверить, будет ли входная дата будущей или старой по отношению к todate.

$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";
}
  • 0
    В массиве $ _POST нет текущей даты. Тогда как этого добиться?
  • 0
    Разве это не тот же ответ?
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню