PHP5 tilsetning av 1 HR for tomme tidsvariabler / beregninger

stemmer
1

Jeg har nylig oppgradert til PHP5, og har noticied at et program jeg har bygget det synes å være en ekstra time lagt til noen av mine variabler og caculations.

Jeg bruker:

date_default_timezone_set ( 'Europe / London');

som jeg forstår betyr at PHP bruker BST motsetning til standard GMT, men når jeg skriver ut tomme variabler (returneres før som 0:00 med H: i) - Jeg er nå å få 01.00.

Når caculating timen / min forskjell mellom to datetimes - Jeg er også å få en ekstra time.

Min grunnleggende koden er:

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

Som for eksempel rown avkastning:

Start: 08:57 (Basert på $ element-> START_TIME som 2011-03-19 08:57:23 i min DB)

Finish: 12:59 (Basert på $ element-> finish_time som 2011-03-19 12:59:38 i min DB)

Caculation: 05:02 (Dette bør være 4:02)

Publisert på 21/04/2011 klokken 09:09
kilden bruker
På andre språk...                            


2 svar

stemmer
0

Prøv å sette

date_default_timezone_set('UTC');

umiddelbart før konvertere medgått tid til H: i formatet

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

huske å tilbakestille det igjen etterpå

Du behandler den medgåtte tiden som en datetime stempel for formatering (som er hva date () forventer) så PHP er etter det er standard oppførsel og behandle det som en nasjonal innstilling formatert dato / klokkeslett (ikke verdsette at det blir brukt som en utløpt tid), så det er å legge timen å vise riktig tid i henhold til din tidssone innstilling.

Svarte 21/04/2011 kl. 12:37
kilden bruker

stemmer
1

Du behandler tidsforskjellen som et punkt i tid når du bruker dato ( "H: i"). Jeg foreslår at du bare beregne medgått tidsforskjellen manuelt

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

Ellers vil du støte på problemer når $ forløpt er større enn 24 timer.

Svarte 21/04/2011 kl. 13:08
kilden bruker

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