#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, вы увидите его.