|
Posted by Roman on 03/25/06 15:44
Noozer wrote:
> "Roman" <news12@ziak.com> wrote in message
> news:VZ8Vf.3928$Hk1.3889@read1.cgocable.net...
>> Noozer wrote:
>>> 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().
>
> 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
[Back to original message]
|