OT: PHP elapsed time question...

N

Noozer

I've got a PHP question (it's my first PHP script)... Hopefully there's a
quick answer.

Why does the following show a 17 hour difference when the "Some Stuff" code
actually takes only 42 seconds?

For output I get:
Elapsed time was 17:00.42.


<?php

$start_time = mktime();

//42 seconds of some stuff happening here

$finish_time = mktime();

echo "Elapsed time was ".(date("G:i.s",$finish_time-$start_time)).".";

?>
 
J

Jonathan N. Little

Noozer said:
I've got a PHP question (it's my first PHP script)... Hopefully there's a
quick answer.

Why does the following show a 17 hour difference when the "Some Stuff" code
actually takes only 42 seconds?

For output I get:
Elapsed time was 17:00.42.


<?php

$start_time = mktime();

//42 seconds of some stuff happening here

$finish_time = mktime();

echo "Elapsed time was ".(date("G:i.s",$finish_time-$start_time)).".";

?>

Resolution, you are using the wrong function

http://www.php.net/manual/en/function.microtime.php
microtime()

vs

http://www.php.net/manual/en/function.mktime.php
mktime()
 
R

Roman

Noozer said:
I've got a PHP question (it's my first PHP script)... Hopefully there's a
quick answer.

Why does the following show a 17 hour difference when the "Some Stuff" code
actually takes only 42 seconds?

For output I get:
Elapsed time was 17:00.42.


<?php

$start_time = mktime();

//42 seconds of some stuff happening here

$finish_time = mktime();

echo "Elapsed time was ".(date("G:i.s",$finish_time-$start_time)).".";

?>

In my opinion the problem is that date() function returns local time. So
if you supply with integer number 42, that would translate into January
1 1970 00:00:42 GMT, but your timezone is GMT+17 or GMT-7 hours, so
that's where it comes from. Try gmdate().
 
N

Noozer

Roman said:
In my opinion the problem is that date() function returns local time. So
if you supply with integer number 42, that would translate into January
1 1970 00:00:42 GMT, but your timezone is GMT+17 or GMT-7 hours, so
that's where it comes from. Try gmdate().

My problem was thinking that a timestamp of 0 = "00/00/00 00:00:00" but
instead means "1969/??/?? 17:??:??"

What I was really trying to do was find the number of seconds between two
timestamps and format it in HH:MM:SS. I didn't know that timestamps were
actually measured in seconds either.

"$finish_time-$start_time" gives me the number of seconds between two
stamps, which is good enough. I would like to know if there is a simple way
format it out to "HH:MM:SS" (i.e. 123 seconds would output "00:02:03")
 
R

Roman

Noozer said:
My problem was thinking that a timestamp of 0 = "00/00/00 00:00:00" but
instead means "1969/??/?? 17:??:??"

What I was really trying to do was find the number of seconds between two
timestamps and format it in HH:MM:SS. I didn't know that timestamps were
actually measured in seconds either.

"$finish_time-$start_time" gives me the number of seconds between two
stamps, which is good enough. I would like to know if there is a simple way
format it out to "HH:MM:SS" (i.e. 123 seconds would output "00:02:03")

You got it right. The date() function as you used will print the time
from timestamp, where 0 corresponds to 01/01/70 00:00:00, so if you omit
the date part, you get string in your desired format. Only you have to
use GMT functions, otherwise the time-zone offset will be added.

I am pretty sure the date function is internally complicated and slow
for this purpose and there is probably a better way to do it. I am just
learning PHP and its libraries and I am not sure what is the resemblance
of PHP's printf() to the one in standard C library, but here is the C way:

printf("%02d:%02d:%02d", (span/3600)%24, (span/60)%60, span%60);

where variable span is the time difference.

Had you posted this question in in comp.lang.php, you wuld get more and
better advices.

Roman
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,014
Latest member
BiancaFix3

Latest Threads

Top