PHP5 toevoegen van 1 HV lege tijdsvariabelen / berekeningen

stemmen
1

Ik heb onlangs een upgrade naar PHP5, en hebben noticied dat binnen een toepassing die ik heb gebouwd lijkt er een extra uur toegevoegd aan sommige van mijn variabelen en caculations zijn.

Ik gebruik:

date_default_timezone_set ( 'Europe / London');

die ik heb begrepen betekent dat PHP is het gebruik van BST in tegenstelling tot standaard GMT, maar toen ik leeg variabelen af ​​te drukken (vóór teruggegeven als 0:00 met H: i) - Ik ben nu het krijgen van 01:00 uur.

Wanneer caculating het uur / min verschil tussen twee tijd-tags - Ik ben ook het krijgen van een extra uur.

Mijn basiscode is:

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

Die voor een voorbeeld Rown returns:

Start: 08:57 (op basis van $ item-> start_time als 2011-03-19 08:57:23 in mijn DB)

Finish: 12:59 (op basis van $ item-> finish_time als 2011-03-19 00:59:38 in mijn DB)

Caculation: 05:02 (Dit moet 4:02)

De vraag is gesteld op 21/04/2011 om 10:09
bron van user
In andere talen...                            


2 antwoorden

stemmen
0

Maak de instellingen

date_default_timezone_set('UTC');

onmiddellijk vóór uw verstreken tijd converteren naar H: i formatteren in

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

herinneren om het daarna weer opnieuw in te stellen

Je bent de behandeling van de verstreken tijd als een datetime stempel voor het formatteren (dat is wat de functie date () verwacht), zodat PHP volgt het standaard gedrag en te behandelen als een locale opgemaakte datum / tijd (niet waarderen dat het wordt gebruikt als een verstreken tijd), dus het is het toevoegen van het uur om de juiste tijd weer te geven op basis van uw tijdzone-instelling.

antwoordde op 21/04/2011 om 13:37
bron van user

stemmen
1

U behandelt het tijdsverschil als een punt in de tijd wanneer u datum gebruiken ( "H: i"). Ik stel voor dat je gewoon de verstreken tijd verschil handmatig te berekenen

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

Anders zal je in de problemen wanneer $ verstreken is groter dan 24 uur.

antwoordde op 21/04/2011 om 14:08
bron van user

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