PHP5 добавление 1 HR в пустые временных переменных / вычисления

голоса
1

Я недавно повышен до PHP5, и noticied, что внутри приложения я построил там, кажется, дополнительный час добавляется в некоторые из моих переменных и caculations.

Я использую:

date_default_timezone_set ( 'Europe / London');

который я понимаю, означает, что PHP использует BST противоположность стандартному GMT, но когда я печатаю пустые переменные (возвращаемый до того, как 00:00, используя «H: я») - я сейчас получаю 01:00.

Когда caculating / разница в час минут между двумя DateTimes - Я также получаю дополнительный час.

Мой основной код:

<td><?php if(isset($item->start_time)) { echo date('H:i', strtotime($item->start_time)); } ?></td>
<td><?php if(isset($item->finish_time)) { echo date('H:i', strtotime($item->finish_time)); }?></td>
<td>
     <?php
     $start = strtotime($item->start_time);
     $end = strtotime($item->finish_time);
     $elapsed = $end - $start;
     if($elapsed != NULL) { echo date(H:i, $elapsed); }
     ?>
</td>

Что для примера rown возвращается:

Начало: 08:57 (на основе $ item-> start_time в 2011-03-19 8:57:23 в моей БД)

Отделка: 12:59 (на основе $ item-> finish_time в 2011-03-19 12:59:38 в моей БД)

Caculation: 5:02 (Это должно быть 04:02)

Задан 21/04/2011 в 10:09
источник пользователем
На других языках...                            


2 ответов

голоса
0

Попробуйте установить

date_default_timezone_set('UTC');

непосредственно перед преобразованием вашего истекшего времени H: я форматировать в

if($elapsed != NULL) { echo date("H:i", $elapsed); } 

помня, чтобы сбросить его снова после

Вы лечения истекшее время как даты и времени штампа для форматирования (это то, что функция даты () ожидает), поэтому PHP следит за это стандартное поведение и рассматривая его в качестве локали отформатированные дату / время (не оценивая, что он используется в качестве истекшее время), так что это добавление час, чтобы отобразить текущее время в соответствии с настройками часового пояса.

Ответил 21/04/2011 в 13:37
источник пользователем

голоса
1

Вы лечите разницу во времени, как в момент времени, когда вы используете дату ( «H: я»). Я предлагаю вам просто вычислить разницу во времени вручную истекшее

echo floor( $elapsed / 60) . ":" . ($elapsed % 60)

В противном случае вы столкнетесь с проблемами, когда $ истекшее больше чем 24 часов.

Ответил 21/04/2011 в 14:08
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more