Как рассчитать интервал между 2 временными метками unix в php БЕЗ деления на 86400 (60 * 60 * 24)

У меня есть 2 временных отметки unix, Im в AsiaPacific / Оклендский часовой пояс (GMT + 12, DaylightSavings = GMT + 13)

Я хочу рассчитать количество интервалов дней между двумя временными метками, где один находится внутри летнего времени, а другой нет.

Мои примеры дат

7 Feb 2009 (1233925200) до 21 September 2010 (1284985360) (не включая 21-е) см. Здесь, он говорит 591 дней: http://www.timeanddate.com/date/durationresult.html?d1=7&m1=2&y1=2009&d2=21&m2 = 9 & у2 = 2010

Давайте подсчитаем, вот мои временные метки (оба они основаны на Окленде 00:00)

 1284985360-1233925200 = 51060160 51060160 / 86400 = 590.974 

Так что мне нужно 591. Я не хочу использовать решение «round up»

Есть ли какой-либо надежный метод, например strtotime, но для расчета интервалов дат, предпочтительно, что не требуется php 5.3+ минимум

EDIT: нужно уточнить, используя STRTOTIME для получения этих временных меток, я думал, что это был UTC

EDIT2: Я считаю, что нашел проблему. Хотя моя дата окончания была 21 сентября, я фактически использовал time (), чтобы получить дату окончания, а time () возвращал неверную метку времени, возможно, она не учитывает GMT + 12, независимо от того, как я переключил время () на strtotime ( date ('d M Y')), и он вернул правильную метку времени! эврика 591 дн.

Ура!

Рассчитайте количество полных дней для обеих временных меток перед вычислением разницы:

 floor(1284985360 / 86400) - floor(1233925200 / 86400) 

Ваш результат всегда является целым числом.

И поскольку вы используете strtotime для получения этих временных меток, укажите время 00:00:00+0000 чтобы всегда получить кратное 86400:

 strtotime($str.' 00:00:00+0000') 

Правильная временная метка Unix (POSIX) находится в UTC, поэтому вы начинаете со значений, которые уже являются неправильными. Вы столкнулись с тяжелой битвой, поскольку API, как правило, предполагают, что отметки времени находятся в UTC. Лучше всего исправить это, после чего простое деление действительно даст правильный результат.

Разделение на 86400 является надежным и легким. Я не знаю никаких специальных функций, и я не вижу причин для их существования.