У меня есть 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 является надежным и легким. Я не знаю никаких специальных функций, и я не вижу причин для их существования.