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