Я могу сделать это за дней так:
$d1 = new DateTime('2000-01-01 12:00:00');
$d2 = new DateTime('2020-01-01 12:00:00');
$diff = $d2->diff($d1);
echo $diff->days;
Другими словами, это работает на дней . Однако класс DateTime / DateInterval имеет только переменную $ days - это ожидается, но не существует :
$diff->weeks;
$diff->months;
$diff->years;
Читая руководство, вы, на первый взгляд, можете быть обмануты, думая, что оно обладает следующими атрибутами: https://www.php.net/manual/en/class.dateinterval.php
public integer $y ;
public integer $m ;
public integer $d ;
public integer $h ;
public integer $i ;
public integer $s ;
public float $f ;
public integer $invert ;
public mixed $days ;
y, m, d, h, i, s не существует "отдельных итогов", а зависит друг от друга. Например, если промежуток времени равен ровно одному году, $ y будет равен 1, но все остальные будут равны 0 вместо их соответствующих представлений (12 месяцев, 52 недели и т. Д. c.).
Они обрабатывают дни специально по какой-то причине, включая переменную $ days, которая показывает фактическое общее количество дней. Я хочу это и для недель, месяцев и лет.
Я уже знаю, как «оценить» количество недель / месяцев / лет между двумя временными метками, используя простые математические и фиксированные переменные, представляющие среднее количество секунд в каждой единице времени. Поскольку при этом не учитываются все сложности «обхода» календарного (ых) формата (ов), такие как високосные годы, разные дни в разные месяцы и многие другие мелкие / сложные детали, вы не получите точное число, которое способ.
Я хочу знать точное общее число число недель между двумя временными метками и одно и то же годами и месяцами, независимо друг от друга.