В чем проблема в коде, написанном для сравнения даты с сегодняшней датой?

Я сравниваю дату с текущей датой (то есть с сегодняшней датой). Ожидается, что ошибка должна появиться только тогда, когда сравниваемая дата больше сегодняшней. Он не должен приходить на дату, которая меньше или равна сегодняшней дате.

Я написал следующий код для этого.

$submission_date = $_POST['submission_date']; //The date in mm-dd-yyyy format that is to be tested against today's date. The value in $submission date is 12-25-2014
//This is a future date. Today's date is 12-10-2014 in dd-mm-yyyy format

$current_date = date('m-d-Y');

if (strtotime($submission_date) > strtotime($current_date))
{
echo "Future date not accepted";
}

С помощью приведенного выше кода я не получаю ошибки для будущих дат, иногда я получаю ошибки и для предыдущих дат.

Как оптимизировать и сделать этот код правильным и стандартным?

-3

Решение

Если опубликованный формат находится в 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";
}

демонстрация

Если вам нужно извлечь некоторую информацию из объектов DateTime, используйте format() метод на них, который принимает тот же формат, что и date() функция:

echo $today_date->format('m/d/Y'); # 12/11/2014
echo $today_date->format('m-d-Y'); # 12-11-2014
echo $today_date->format('Y-m-d'); # 2014-12-11
echo $today_date->format('Y-Y-Y'); # 2014-2014-2014

демонстрация

5

Другие решения

Я думаю, вам нужно сравнить дату в формате «Y-m-d» или «d-m-Y». Я думаю, что невозможно сравнить дату в формате ‘m-d-Y’

-1

Поскольку мы внесли изменения в ваш код и тестируем его, он работает со мной, так что вы можете попробовать ниже.

$submission_date = $_POST['submission_date'];
$current_date = date('d-m-y H:i:s');
if (strtotime($submission_date) > strtotime($current_date))
{
echo "Future date not accepted";
}

Надеюсь это поможет.

-1