Как округлить GMT дату до суток

vadim

Guest
kingdom
Вы ещё не написали один важный вопрос: в каком формате вы эти обе даты получаете?? В TIMESTAMP-e?? Или тоже в каком строковом формате??? Если в TIMESTAMP-e, то можно просто дата1-дата2 и то, что получилось поделить на количество секунд в дне (то есть 24*60*60), таким образом вы получите количество дней между двумя TIMESTAMP-ами.
 

kingdom

Новичок
считать разницу в днях как разницу в секундах поделенную на количество секунд в дне неправильно

пример
3 апреля 01-00
1 апреля 23-00
разница 26 часов

3 апреля 03-00
2 апреля 01-00
разница тоже 26 часов

но в первом случае разница в один день, а во втором в два

-~{}~ 02.04.06 17:29:

>vadim
получаю в TIMESTAMP, как я уже написал, так считать нельзя
 

zerkms

TDD infected
Команда форума
kingdom
идёшь по ссылке которую дал я - и напильником дорабатываешь чтобы умело считать время

а если без учёта времени, а именно как ты сказал - то просто берёшь и юзаешь как есть

ps: низ страницы
 

kingdom

Новичок
>zerkms
спасибо за ссылку, наконец нашелся человек, который понял что надо =))

если использовать calc_period, то нужно передавать строковое представление даты, а тогда можно сделать проще
$days = strtotime(gmdate('d M, Y', $date1)) - strtotime(gmdate('d M, Y', $date2)) / (60 * 60 * 24);

прикольная функция date2Days, а что за алгоритм?
 

zerkms

TDD infected
Команда форума
kingdom
но в отличие от (разница в днях) / (60 * 60 * 24) с calc_period ты получишь разницу в месяцах и годах, тем более что можно её переписать с тем чтобы передавать 2 таймштампа
 

vadim

Guest
kingdom
ещё кстати функции округления никто не отменял, если надо округлить до близжайшего целого дня, то есть ceil()
Почему я за это решение: потомучто это просто математика и работает намного быстрей, чем перевод в строку и обратно
 

kingdom

Новичок
ошибся с форматом,Ю вот как надо
$days = strtotime(gmdate('d F Y', $date1)) - strtotime(gmdate('d F Y', $date2)) / (60 * 60 * 24);

>zerkms
да получу, просто для моей задачи надо именно в днях,
но я ссылочку сохраню, полезная

однако, вопрос с расшифровкой GMT даты остался открытым, для обычной даты есть getDate(), а для GMT получается что нету =(( разве что парсить строковую дату самому или средствами php
 

vadim

Guest
Автор оригинала: kingdom
пример
3 апреля 01-00
1 апреля 23-00
разница 26 часов

3 апреля 03-00
2 апреля 01-00
разница тоже 26 часов
Я честно говоря не очень понял, почему 26 часов это один раз один день а в другой раз два дня :)
Видимо это и является зерном вопроса
 

zerkms

TDD infected
Команда форума
vadim
потому что 3 апреля - 1 апреля = 2 дня
3 апреля - 2 апреля = 1 день ;))))
 

kingdom

Новичок
что-то я поспешил с
$days = strtotime(gmdate('d F Y', $date1)) - strtotime(gmdate('d F Y', $date2)) / (60 * 60 * 24);

работает не всегда правильно =((
почему-то формула чувствительна к текущей зоне

-~{}~ 02.04.06 22:09:

например при GMT -4,-5,-6,-7,-8,-9

-~{}~ 02.04.06 22:13:

если GMT -9
для 03 April 2006 6:13
strtotime(gmdate('d F Y', $date1)) = 03 April 2006 8:00
а для 01 April 2006 7:18
strtotime(gmdate('d F Y', $date1)) = 01 April 2006 9:00

-~{}~ 02.04.06 22:15:

это чначит, что $days получается не целым, чего не должно быть =((
 
Сверху