Не получить нужную дату - PullRequest
       1

Не получить нужную дату

0 голосов
/ 26 сентября 2018

Я хочу вычислить разницу между датой, используя date_diff (), чей 1-й параметр сохраняет данные в базе данных, а 2-й параметр - сегодняшняя дата.$ Pro_deadline поступает из базы данных и имеет тип text (формат yyyy-mm-dd), поэтому я преобразовал его во время с помощью strtotime ().Но в конце я получаю «Предупреждение: date_diff () ожидает, что параметр 1 будет DateTimeInterface, строка дана»

$today = date("Y-m-d");
echo $today;
$end = strtotime($pro_deadline);
$end_line = date("Y-m-d",$end);
echo $end_line;
$diff = date_diff($end_line,$today);
echo $diff;

Ответы [ 4 ]

0 голосов
/ 26 сентября 2018

Функция date() возвращает простую строку, но функция date_diff () ожидает дату object .

Вы можете сделать все это намного проще с помощью функций в DateTime class:

$pro_deadline = "2018-09-01";
$today = new DateTime();
$end = new DateTime($pro_deadline);
$interval = $end->diff($today);
echo $interval->format('%R%a days');

Этот пример выводит +25 days Нажмите здесь для запуска демо-версии

Дополнительные примеры функции diff () здесь

0 голосов
/ 26 сентября 2018

в соответствии с документацией PHP http://php.net/manual/en/function.date-diff.php

date_diff — Alias of DateTime::diff()

, поэтому значения параметра date_diff должны быть типов DateTimeInterface.

я бы попробовал

<?php

$today = date("Y-m-d");
echo $today."            ";
$today = date_create($today);
$pro_deadline = '10-15-18';
$end = strtotime($pro_deadline);
$end_line = date_create(date("Y-m-d",$end));
$diff = date_diff($end_line,$today);
echo $diff->format('%a');
echo " days apart";
?>

функция date_create () является псевдонимом конструктора DateTime.http://php.net/manual/en/datetime.construct.php

это создает интерфейс для даты / времени, который может интерпретировать функция date_diff ().тогда date_diff () возвращает объект DateInterval

http://php.net/manual/en/class.dateinterval.php

объект DateInterval имеет метод формата

http://php.net/manual/en/dateinterval.format.php

, который может вернуть датув жале для вас.

Надеюсь, это объяснение поможет!

0 голосов
/ 26 сентября 2018

Прежде всего, если вам нужна разница между датой в базе данных и сегодняшней датой, просто сделайте это в базе данных напрямую.Вы не указали, какую БД, но, например, в MySQL вы бы сделали что-то вроде:

SELECT DATEDIFF(some_field, now()) FROM ...

Если вы настаиваете на том, чтобы делать это в PHP, то не используйте strtotime, а используйте DateTime объект:

$today = new DateTime();
$end = new DateTime($pro_deadline);
$diff = $end.diff($today)
0 голосов
/ 26 сентября 2018

Как и в сообщении об ошибке, date_diff ожидает DateTimeInterface параметров.strtotime возвращает отметку времени как целое число, с которым она не может работать.

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

$today = new DateTime;
$end = new DateTime($pro_deadline);

, а затем передайте эти два объекта в date_diff и используйте метод DateInterval::format для отображения количества дней (при условии, что это желаемый результат):

$diff = date_diff($today,$end);
echo $diff->format('%a');

См. https://3v4l.org/QVkad для полного примера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...