Re: Time Processing
| From: | A. R. M. | Date: | Sun, 14 Oct 2001 06:05:54 +0000 |
| Subject: | Re: Time Processing | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-71019@lists.php.net to get a copy of this message | ||
Hi,
As I said, PHP doesn't seem to have enough built-in functions to process
time values.
So, I wrote my own functions to deal with times and I'm posting them here
for either inclusion, or for other people's use.
Here they are. Enjoy.
=====================
<?php
function CheckTime($t) {
/* Checks the value of a 24-hour formatted time to be correct.
Returns 0 if bad time format, 1 otherwise.
*/
return ( ereg("[012][0-9]:[0-5][0-9](:[0-5][0-9])?", $t) );
}
function TimeToUnixTime($t) {
/* Takes a time in HH:MM:SS format and returns a unix time (or number of
seconds) since Jan 1, 1970 (UNIX epoch).
Returns 0 if the format is incorrect.
*/
if ( !CheckTime($t) )
return (0);
$time = explode (":", $t);
return ( mktime($time[0], $time[1], $time[2], 1, 1, 1970) - 18000);
/* I have no idea why mktime behaves this way, but I had to deduct 5 hours
to make it work right. As if it's returned in GMT.
*/
}
function SumTimes($t1, $t2) {
/* Takes two times in HH:MM:SS format and returns the sum.
Returns 0 if task is not possible.
*/
if ( !CheckTime($t1) || !CheckTime($t2) )
return (0);
$time1 = explode (":", $t1);
$time2 = explode (":", $t2);
$h = $time1[0] + $time2[0];
$m = $time1[1] + $time2[1];
$s = $time1[2] + $time2[2];
while ( $s > 59 ) {
$m++;
$s -= 60;
}
while ( $m > 59 ) {
$h++;
$m -= 60;
}
return ( sprintf("%02d:%02d:%02d", $h, $m, $s) );
/* another method is to use date() and mktime() instead of all the above, like this:
return( date("H:i:s", (TimeToUnixTime($t1) + TimeToUnixTime($t2) + 18000)) );
*/
}
function DiffTimes($t1, $t2) {
/* Takes two times in HH:MM:SS format and returns the difference.
$t1 must be less than $t2. Returns 0 if task is not possible.
*/
if ( !CheckTime($t1) || !CheckTime($t2) )
return (0);
$time1 = explode (":", $t1);
$time2 = explode (":", $t2);
$h = $time2[0] - $time1[0];
$m = $time2[1] - $time1[1];
$s = $time2[2] - $time1[2];
while ( $s < 0 ) {
$s += 60;
$m--;
}
while ( $m < 0 ) {
$m += 60;
$h--;
}
return( sprintf("%02d:%02d:%02d", $h, $m, $s) );
}
?>