Расчет даты разницы

у меня проблема с вычислением разницы между двумя датами (включая дату окончания) с использованием углерода. Вот проблема:

Я использую этот код (источник: ответ Данхарпера в https://laracasts.com/discuss/channels/general-discussion/carbon-display-age-in-years-months-day?page=1):

$dateFrom = new Carbon("2017-01-01");
$dateTo   = new Carbon("2017-12-31");
$dateTo   = $dateTo->addDay();  //including End Date

echo $dateFrom->diff($dateTo)->format('%y') . " year, <br>";
echo $dateFrom->diff($dateTo)->format('%m') . " month, <br>";
echo $dateFrom->diff($dateTo)->format('%d') . " day <br>";
echo "difference " . $dateFrom->diffInDays($dateTo) . " days <br>";

Сценарий 1:

Скажем, $date1 = 2017-01-01 а также $date2 = 2017-12-31, тогда это будет результаты:

1 year, 0 month, 0 day
difference 365 days

Когда я использую калькулятор даты в https://www.timeanddate.com/date/durationresult.html?d1=1&m1 = 1&y1 = 2017&d2 = 31&м2 = 12&у2 = 2017&ти = о, это приведет к:

It is 365 days from the start date to the end date, end date included
Or 1 year including the end date

Они привели один и тот же ответ. НО:

Сценарий 2:

$date1 = 2017-10-01 а также $date2 = 2017-12-31, тогда это будет результаты:

0 year, 3 month, 1 day
difference 92 days

Используя калькулятор даты в https://www.timeanddate.com/date/durationresult.html?d1=1&m1 = 10&y1 = 2017&d2 = 31&м2 = 12&у2 = 2017&ти = о, это приведет к:

It is 92 days from the start date to the end date, end date included
Or 3 months including the end date

Результат в timeanddate.com ровно 3 месяца ТОЛЬКО. Не с 1 день.

Я хочу, чтобы результат 3 месяца (timeanddate.com ответ).

Как я могу добиться этого ответа?

Или, если это не может быть достигнуто, есть ли другой метод для достижения:
x months y days?
(Например: 1 jan 2017 ~ 5 feb 2019 знак равно 25 months, 5 days)

Пожалуйста, помогите мне.

0

Решение

Вы можете изменить свой код следующим образом,

$dateFrom = new Carbon("2017-01-01");
$dateTo = new Carbon("2017-12-31");
$dateTo   = $dateTo->addDay();  //including End Date

$days = $dateFrom->diffInDays($dateTo);
$months = $dateFrom->diffInMonths($dateTo);
$years = $dateFrom->diffInYears($dateto);

В вашем коде вы измеряли разницу много раз, а не один раз. использование diffInDays(), diffInMonths() а также diffInYears() функции для получения значений дней, месяцев и лет между двумя датами.

Надеюсь, вы понимаете.

0

Другие решения

Сценарий 1

$start_date = new DateTime('1 Jan 2017');
$end_date   = new DateTime('5 Feb 2019 +1 day');

$difference = $start_date->diff($end_date);

$year_diff = $difference->format('%y');
$months_diff = $difference->format('%m');

$total_months = $months_diff + ($year_diff * 12);

$output = $total_months . ' months ' . $difference->format('%d') . ' days';

// would output 25 months 5 days

Сценарий 2

$start_date = new DateTime('2017-10-01');
$end_date   = new DateTime('2017-12-31 +1 day');

$difference = $start_date->diff($end_date);

$year_diff = $difference->format('%y');
$months_diff = $difference->format('%m');

$total_months = $months_diff + ($year_diff * 12);

$output = $total_months . ' months ' . $difference->format('%d') . ' days';

// would output 3 months 1 days
0

По вопросам рекламы [email protected]