Я немного сбит с толку, я использую date_diff, чтобы получить разницу дней в - / + integer, я могу получить только + дней, хотя это должно быть -дней, когда 2-я дата выше 1-й.
$datetime1 = new DateTime("2018-01-09");
$datetime2 = new DateTime("2018-09-08");
$interval = $datetime1->diff($datetime2);
dd($interval->format('%R%a days'));
результат
string(9) "+242 days"
это должно быть -21 день, так как date1 отстает от date2.
Это немного сбивает с толку из-за разнообразного использования функций. Между какими двумя датами вы пытаетесь понять разницу?
Допустим, сегодня 1-е число, а 2-е - 09.09.2018.
Немного упростив ваш код (используя конструкторы DateTime
вместо всех этих функций), я не могу воспроизвести это ~ 3v4l.org/YSkbf
Я редактирую свой ответ, потому что думаю, что в вашем вопросе есть опечатка, когда вы говорите -21 день, а не -241 дней.
Итак, стандарт для DateTime - «Y-m-d».
Разница между датами будет рассчитываться так:
$firstDate = new DateTime('2018-01-10');
$secondDate = new DateTime('2018-01-15');
$firstDate->diff($secondDate);
Что можно перевести как:
$secondDate - $firstDate;
Убедитесь, что этот вывод не запутает вас, он даст правильный вывод, небольшое изменение в вашем коде
// for negative difference output is -31days and date should be in yy-m-d format
$datetime1 = new DateTime("2018-02-01");
$datetime2 = new DateTime("2018-01-01");
$interval = $datetime1->diff($datetime2);
printf($interval->format('%R%a days'));
echo "<br>";
// for positive difference output is +31days and date should be in yy-m-d format
$datetime3 = new DateTime("2018-01-01");
$datetime4 = new DateTime("2018-02-01");
$interval = $datetime3->diff($datetime4);
printf($interval->format('%R%a days'));
//bellow is output i get which is correct
Разве это не должно быть
->format(...)
(с дефисом перед "больше")?