PHP: DateTime::diff выдаёт неверный интервал в месяцах

337
19 марта 2017, 06:44

Добрый день!

Есть задача, определения количества полных месяцев между датами. Написал вот такой код:

$datetime1 = new DateTime(date("Y-m-d", $date1));
$datetime2 = new DateTime(date("Y-m-d", $date2));
$interval = $datetime1->diff($datetime2);
$month = $interval->format('%m')+$interval->format('%y')*12;

результат выполнения данного скрипта для интервала дат 2016-11-30 - 2017-03-01 выдаёт 2. Когда очевидно, что должно быть 3. В чём может быть проблема?

Answer 1

Всего-лишь предположение: количество месяцев высчитывается исходя из среднего количества дней в месяце.

<?php
$datetime1 = new DateTime('2016-11-30');
$datetime2 = new DateTime('2017-03-01');
$interval = $datetime1->diff($datetime2);
var_dump($interval->days / 30.4375); // 30.4375 среднее количество дней в месяце за период в четыре года
$month = $interval->m + $interval->y * 12;
var_dump($month);

Результат

float(2.9897330595483)
int(2)

Для

$datetime1 = new DateTime('2016-11-30');
$datetime2 = new DateTime('2017-03-01');

Результат

float(3.0225872689938)
int(3)
READ ALSO
DateDiff sql Activerecord

DateDiff sql Activerecord

Нужно выводить запись, только после того как прошло 20 минут, есть такой код, но он не работаетдата хранится в int в unixtimestamp

347