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

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

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

$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

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

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

$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";
}

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

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

Другие вопросы по тегам