Разница дат

На php вычислить разницу дат тяжко. Никто так и не публикует решение, которое бы не давало погрешностей. Кто сталкивался поймет. Кто не сталкивался скажу, что найти разницу в днях, или месяцах нет проблем. Но когда нужно указать корректно с месяцем февраль, или если в одном месяце (из промежутка) есть 31 день, а в другом 30, то начинается путаница :( Я уж молчу про года....
На моей памяти это обсуждалось тут

$datetime1 = new DateTime(date('d.m.Y H:i'));
$datetime2 = new DateTime(date('13.09.2012 01:00'));
$interval = $datetime1->diff($datetime2);

echo $interval->format('%y year(s) %m month(s) %d day(s), %H hour(s) %i minute(s) %s second(s)');


Но к сожалению у меня не подключен модуль что-ли.. Я только верю, что решение верное.
Далее подняли этот вопрос в новой теме
Но так и нет идеально решения... наверно никто сильно и не старался. Не знаю.

Мне в итоге подходит другое решение
Я обнаружила, что в PostgreSql есть готовое решение: функция age
Цитирую документацию
Note there can be ambiguity in the months returned by age because different months have a different number of days. PostgreSQL's approach uses the month from the earlier of the two dates when calculating partial months. For example, age('2004-06-01', '2004-04-30') uses April to yield 1 mon 1 day, while using May would yield 1 mon 2 days because May has 31 days, while April has only 30.


age(timestamp '2001-04-10', timestamp '1957-06-13') => 43 years 9 mons 27 days


В моем случае осталось распарсить и перевести на русский.
Лично для меня это лучший пока вариант ибо писать идеальную функцию на php лень, найти не получается, сделать, чтобы первый вариант с DateTime отработал, времени нет :(

Комментарии

Популярные сообщения