Date_Diff не возвращает желаемый результат

Я немного сбит с толку, я использую 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.

Разве это не должно быть ->format(...) (с дефисом перед "больше")?

Phil 10.08.2018 07:33

Это немного сбивает с толку из-за разнообразного использования функций. Между какими двумя датами вы пытаетесь понять разницу?

Phil 10.08.2018 07:35

Допустим, сегодня 1-е число, а 2-е - 09.09.2018.

ralphy 10.08.2018 07:37

Немного упростив ваш код (используя конструкторы DateTime вместо всех этих функций), я не могу воспроизвести это ~ 3v4l.org/YSkbf

Phil 10.08.2018 07:41
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
124
2

Ответы 2

Я редактирую свой ответ, потому что думаю, что в вашем вопросе есть опечатка, когда вы говорите -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

output

Другие вопросы по теме