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

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

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

$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('md-Y'); if (strtotime($submission_date) > strtotime($current_date)) { echo "Future date not accepted"; } 

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

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

Если опубликованный формат находится в mdY , то вы не можете преобразовать его в unix timestamp напрямую с strtotime() функции strtotime() , потому что он вернет false .

Если вам нужно использовать strtotime() измените формат ввода на m/d/Y простым str_replace() .

С другой стороны, вы можете использовать класс DateTime , где вы можете напрямую сравнивать объекты:

 $submission_date = DateTime::createFromFormat('!md-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('md-Y'); # 12-11-2014 echo $today_date->format('Ym-d'); # 2014-12-11 echo $today_date->format('YY-Y'); # 2014-2014-2014 

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

Я думаю, вам нужно сравнить дату в формате «Ymd» или «dmY». Я думаю, что сравнивать дату в формате «mdY» невозможно

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

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

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