PHP Rekenen met tijden: huidge tijd - ....

Status
Niet open voor verdere reacties.

kristofm

Gebruiker
Lid geworden
15 jan 2009
Berichten
7
Goedeavond,

Ik probeer een berekening te maken door het verschil van de huidige tijd min de starttijd.
Huidige tijd afdrukken= OK
Laatste refresh: <?php echo(strftime("%H:%M:%S"));?>

Daarna haal ik de starttijd uit een database= ok want deze kan ik weergeven
$start1 = trim(odbc_result($queryexe, "timestart"));

En dan komt mijn berekening:
$tijd1 = strtotime($start1);
$tijd2 = strftime("%H:%M:%S");
$duur = $tijd1-$tijd2;

Helaas wanneer ik de duur afdruk krijg ik niet het juiste resultaat.
Heeft iemand hier ervaring mee?
 
Als ik het zo zie is $tijd1 een timestamp (en dat is goed) maar $tijd2 een tekstuele representatie van de tijd. En die kun je niet van elkaar aftrekken...

Probeer voor $tijd2 eens gewoon de waarde van time() te gebruiken, dan heb je twee getallen.

Overigens moet je de grootste van de twee (en dat is ws time(), tenzij $tijd1 in de toekomst ligt) aan de linkerkant zetten, anders krijg je een negatief getal. :)
 
Ik heb de code even aangepast volgens jouw advies

$tijd1 = strtotime($start1);
$tijd2 = time("%H:%M:%S");
$duur = $tijd2-$tijd1;

Ik krijg nu echter geen tijd als resultaat maar "1233864074"
 
PHP:
$tijd1 = strtotime($start1);
$tijd2 = time("%H:%M:%S");
$duur = $tijd2-$tijd1;
echo strftime("%H:%M:%S", $duur);
 
Dat gaat em ook niet worden. time() accepteert geen format, hij geeft gewoon de huidige tijd terug als getal.

PHP:
$tijd1 = strtotime($start1);
$tijd2 = time();
$duur = $tijd2-$tijd1;
echo strftime("%H:%M:%S", $duur);

Dit zou het moeten zijn. De enige vraag is dan nog wat de inhoud van $start1 is... kun je die eens laten zien hier? Dat zou een getal moeten zijn uit je database.
 
Ooh ja, sorry! Had alleen de code van kristof overgenomen. Je hebt gelijk!
 
De huidige code van start1 = $start1 = trim(odbc_result($queryexe, "timestart"));

Hoe kan dit?
Hij geeft nu dit weer

Huidige tijd: 21:21:53
Starttijd: 21:10:31

Resultaat: 01:11:23

1 uur teveel dus....
Ook als de starttijd 0 is dan geeft hij altijd 1uur teveel aan???
 
Laatst bewerkt:
Ah. Dat komt omdat je de terugkomst parsed als een timestamp... en die begint bij 1 januari 1970 om 1 uur 's nachts.

Het is ook niet zozeer de duur nu, maar een tijdstip (als het bijv. meer dan 24 uur verschil zou zijn, dan zou ie weer gewoon bij 0:00 beginnen)

Das ook mijn fout... eh... ik weet niet of PHP een ingebakken functie heeft om seconden in leesbaar formaat om te zetten.

Volgensmij niet, dus ik ga er es ff 1 maken :)

edit

Probeer deze functie eens.

PHP:
function readableTime( $iTime ) {	
	
	$bNeg = $iTime < 0;
	$iTime = abs($iTime);
	
	$iSeconds = $iTime % 60;
	$iMinutes = floor ( $iTime / 60 ) % 60;
	$iHours = floor ( $iTime / 3600 ) % 24;
	$iDays = floor ( $iTime / 86400 );
	
	return ( $bNeg ? '- ' : '' ) . ( $iDays ? $iDays . ':' : '' ) . str_pad( $iHours, 2, '0', STR_PAD_LEFT ) . ':' . str_pad( $iMinutes, 2, '0', STR_PAD_LEFT ) . ':' . str_pad( $iSeconds, 2, '0', STR_PAD_LEFT );
	
}
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan