PHP5 добавляет 1 HR к пустым переменным времени / вычислениям - PullRequest
1 голос
/ 21 апреля 2011

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

Я использую:

date_default_timezone_set ('Europe / London');

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

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

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

<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 08:57:23 в моей БД)

Окончание: 12:59 (на основе $ item-> finish_time как 2011-03-19 12:59:38 в моей базе данных)

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

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

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

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

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

0 голосов
/ 21 апреля 2011

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

date_default_timezone_set('UTC');

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

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

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

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

...