DateTime return Всего дней вместо оставшихся дней в PHP - PullRequest
0 голосов
/ 09 января 2019

У меня есть MySQL DB, в которой хранятся даты гарантии. Значения: Start_Date и End_Date, я пытаюсь подсчитать оставшиеся дни гарантии.

Пример:

  • Счет 0001
  • Гарантийный запуск (2018-12-01)
  • Окончание гарантии (2019-01-11)
  • Вывод: гарантия истекает через 2 дня (при условии, что действует 2019-01-09)

Попробуйте # 1 - DateTime

#date_1 = 2018-12-01 (From MySQL) - Start / PAST
#date_2 = 2019-01-11 (From MySQL) - End / FUTURE

$d1 = new DateTime($date_1);
$d2 = new DateTime($date_2);

$int = date_diff($d1, $d2);
$r = $int->format('In %a days'); 

Выход за 41 день

Попробуйте # 2 - Date_Create

#date_1 = 2018-12-01 (From MySQL) - Start / PAST
#date_2 = 2019-01-11 (From MySQL) - End / FUTURE

$d1 = date_create($date_1);
$d2 = date_create($date_2);

$int = date_diff($d1, $d2);

return $int->format('%a');

Выход 41

Попробуйте # 3 - SQL DATEDIFF

$data = $pdo->query("
SELECT *, DATEDIFF(start_date, end_date) 
AS date_difference 
FROM `warranty` 
ORDER BY id 
DESC
")->fetchAll();

Выход -41

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

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Если я вас правильно понял, вам нужно использовать сегодня для начала, а не день в прошлом, например.

$d1 = new DateTime();
$d2 = new DateTime($date_2);

$int = date_diff($d1, $d2);
$r = $int->format('In %a days'); 

Это даст вам оставшиеся дни с сегодняшнего дня до окончания гарантии.

0 голосов
/ 09 января 2019

Проверьте документы DATEDIFF:

date1, date2    Required. Two dates to calculate the number of days between. (date1 - date2)

Вам нужно:

DATEDIFF(end_date, start_date) 
...