使用时间(HH:MM:SS)的数字字符串进行计算


Calculations with strings of numbers which are times (HH:MM:SS)

我想知道是否有可能在PHP/Codeigniter中减去

时间格式的值

HH: MM: SS

例如:

$time1 = "12:45:03";
$time2 = "14:03:48";
$timelength = $time2- $time1;

任何建议或链接到代码示例?

这就像

//function to convert seconds into hour:minute:second
function sec2hms ($sec, $padHours = false) 
{
    // start with a blank string
    $hms = "";
     // do the hours first: there are 3600 seconds in an hour, so if we divide
     // the total number of seconds by 3600 and throw away the remainder, we're
     // left with the number of hours in those seconds
     $hours = intval(intval($sec) / 3600); 
     // add hours to $hms (with a leading 0 if asked for)
     $hms .= ($padHours) 
     ? str_pad($hours, 2, "0", STR_PAD_LEFT). ":"
     : $hours. ":";
     // dividing the total seconds by 60 will give us the number of minutes
     // in total, but we're interested in *minutes past the hour* and to get
     // this, we have to divide by 60 again and then use the remainder
     $minutes = intval(($sec / 60) % 60); 
     // add minutes to $hms (with a leading 0 if needed)
     $hms .= str_pad($minutes, 2, "0", STR_PAD_LEFT). ":";
    // seconds past the minute are found by dividing the total number of seconds
    // by 60 and using the remainder
    $seconds = intval($sec % 60); 
    // add seconds to $hms (with a leading 0 if needed)
    $hms .= str_pad($seconds, 2, "0", STR_PAD_LEFT);
   // done!
   return $hms;
 }
$subtracted_time = strtotime($time2) - strtotime($time1); //gives difference in seconds
echo(sec2hms($subtracted_time));

函数sec2hms源http://www.laughing-buddha.net/php/lib/sec2hms/

我将使用strtotime()函数将时间转换为UNIX时间值。然后,您可以减去这两个值,因为它们将是整数,然后使用date()函数以您想要的方式格式化差值。

这是我的建议(工作PHP代码):

$time1 = '12:45:03';
$time2 = '14:03:48';
$timelength = strtotime( $time2 ) - strtotime( $time1 );
$hours = intval( $timelength / 3600 );
$minutes = intval( ( $timelength % 3600 ) / 60 );
$seconds = $timelength % 60;
echo str_pad( $hours, 2, '0', STR_PAD_LEFT ) . ':' . str_pad( $minutes, 2, '0', STR_PAD_LEFT ) . ':' . str_pad( $seconds, 2, '0', STR_PAD_LEFT );
输出:

01:18:45

使用以下方法来帮助你

function calculate_time_past($start_time, $end_time, $format = "s") { 
        $time_span = strtotime($end_time) - strtotime($start_time); 
        if ($format == "s") 
        { // is default format so dynamically calculate date format 
            if ($time_span > 60) { $format = "i:s"; } 
            if ($time_span > 3600) { $format = "H:i:s"; } 
        } 
        return gmdate($format, $time_span); 
} 
$tdiff=calculate_time_past($time1, $time2, "H:i:s"); // will output 00:02:45 when format is overridden 

作为对BenGC答案的补充

$tmp_time1 = strtotime($submit_date);
$tmp_time2 = strtotime($submit_date);
$timelength = $tmp_time2 - $tmp_time1;

应该工作,我没有测试它,但我已经使用了非常相似的代码。你得到两次之间的秒数