Сравнение дат PHP и strtotime

#php #date #datetime #strtotime

#php #Дата #datetime #strtotime

Вопрос:

Используя WIndows, XAMPP 5.6.8, я создаю простое веб-приложение на HTML и PHP.

Я хотел бы сравнить дату, полученную из базы данных, с сегодняшней датой.

У меня есть функция, которая успешно возвращает строковое значение (в формате даты Великобритании d-m-y ).

Мой код до сих пор;

 $expDate = get_api_data($id); // returns a string
var_dump($expDate); // this prints string(8) "31-12-19"
  

Используя это $expDate значение, я хотел бы добиться чего-то вроде;

 if (strtotime('d-m-y', $expDate) > time()) { // if date > than today
    echo 'date is greater than today';
}
elseif (strtotime('d-m-y', $expDate) < time()) { // if date < than today
    echo 'date is less than today';
}
else { 
    echo 'date not found';
}
  

В настоящее время я получаю дату меньше, чем сегодня, хотя дата есть 31-12-19 . Я не уверен, правильно ли я подхожу к этому?

Любая помощь была бы весьма признательна, поскольку я уже потратил много времени на изучение ответов, но безрезультатно.

Комментарии:

1. Ваш strtotime() даст вам сегодняшнюю дату и 00:00:00 в качестве времени и time() даст вам сегодняшнюю дату, включая время (более высокое значение, если время ровно после полуночи), поэтому оно всегда будет больше … .

2. strtotime нужен допустимый формат, вы не можете просто передать свой собственный формат. Пожалуйста, ознакомьтесь с документацией по адресу php.net/manual/en/function.strtotime.php

3. Кстати, strtotime не принимает формат даты в качестве первого выражения.

4. Похоже, вы, возможно, хотели использовать date_create_from_format , но это не сработало time() бы, поскольку один возвращает объект DateTime, а другой возвращает временную метку (целое число).

Ответ №1:

Я получил эту ошибку при выполнении вашего кода

PHP Notice: обнаружено неверно сформированное числовое значение

Вы должны посмотреть документ, чтобы правильно использовать эту функцию: http://php.net/manual/fr/function.strtotime.php

Первым параметром должно быть время, а не формат.

Кстати, я предпочитаю использовать класс DateTime для сравнения дат, вы можете сделать:

 <?php

  $expectedDate = DateTime::createFromFormat('d-m-y', get_api_data($id));
  $nowDate = new DateTime();

  if ($expectedDate > $nowDate) { // if date > than today
    echo 'date is greater than today';
  }
  elseif ($expectedDate < $nowDate) { // if date < than today
    echo 'date is less than today';
  }
  else {
    echo 'date not found';
  }
  

Ответ №2:

 $formattedDate = DateTime::createFromFormat('d-m-y', $expDate);
$expDate= $formattedDate->getTimestamp();
if ($expDate > time()) { // if date > than today
echo 'date is greater than today';
.....
  

Попробуйте приведенный выше пример кода, попробуйте использовать класс DateTime, если у вас PHP 5.2.0 или выше http://php.net/manual/en/datetime.createfromformat.php . Затем, используя этот объект DateTime, вы можете выполнять сравнения так, как хотите, например, в моем примере я делаю это по времени.

В вашем коде появится уведомление. если вы включите отчет об ошибках php, вы увидите его.