PHP5 dodanie 1 godziny do pustych czasowych zmiennych / obliczeń

głosy
1

I niedawno uaktualniony do PHP5, i noticied że w aplikacji I został zbudowany nie wydaje się być dodatkowa godzina dodawane do niektórych moich zmiennych i caculations.

Ja używam:

date_default_timezone_set ( 'Europa / Londyn');

Rozumiem, który oznacza, że ​​PHP jest za pomocą BST przeciwieństwie do standardowego GMT, ale podczas drukowania pustych zmienne (jak wrócił przed 00:00 używając „H: i”) - Jestem teraz coraz 01:00.

Kiedy caculating godzinę / mins różnicę między dwoma datetimes - Ja również otrzymuję dodatkową godzinę.

Mój podstawowy kod jest:

<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>

Który na przykład rown zwrotów:

Start: 08:57 (Na podstawie $ item-> start_time jak 2011-03-19 08:57:23 w moim DB)

Wykończenie: 12:59 (Na podstawie $ item-> finish_time jak 2011-03-19 12:59:38 w moim DB)

Caculation: 05:02 (Powinno być 04:02)

Utwórz 21/04/2011 o 10:09
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

Spróbuj ustawić

date_default_timezone_set('UTC');

bezpośrednio przed konwersją swój czas, który upłynął do H: i formatować w

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

pamiętając o usunięciu go ponownie później

Jesteś traktując czas, który upłynął w postaci stempla datetime formatowania (to co funkcja date () oczekuje), więc PHP jest po to standardowe zachowanie i traktowanie go jako locale sformatowana data / czas (nie doceniając, że jest on używany jako upłynął czas), więc to dodanie godzinę poprawne wyświetlanie czasu w zależności od ustawienia strefy czasowej.

Odpowiedział 21/04/2011 o 13:37
źródło użytkownik

głosy
1

Jesteś traktując różnicę czasu jako punkt w czasie, gdy używasz datę ( „H: i”). Proponuję po prostu obliczyć różnicę czasu, który upłynął ręcznie

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

W przeciwnym razie będziesz napotkasz problemy podczas $ upływający jest większy niż 24 godzin.

Odpowiedział 21/04/2011 o 14:08
źródło użytkownik

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