Метод вычитания строки чисел, которые являются временами (ЧЧ: ММ: СС) в PHP? - PullRequest
3 голосов
/ 28 июля 2011

Мне было интересно, возможно ли в PHP / Codeigniter вычитать значения в формате времени

HH: MM: SS

Например:

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

$timelength = $time2- $time1;

Любые предложения или ссылки на примеры кода?

Ответы [ 5 ]

3 голосов
/ 28 июля 2011

это будет похоже на

    //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 source http://www.laughing -buddha.net / php / lib / sec2hms /

2 голосов
/ 28 июля 2011

Это мое предложение (рабочий код 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

2 голосов
/ 28 июля 2011

Я бы использовал функцию strtotime() для преобразования времени в значения времени UNIX. Затем вы можете вычесть два значения, потому что они будут целыми числами, а затем использовать функцию date(), чтобы отформатировать разницу так, как вы хотите.

0 голосов
/ 10 ноября 2014

используйте следующее, что поможет вам

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 
0 голосов
/ 28 июля 2011

Как дополнение к ответу BenGC

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

Должно работать, я не проверял его, но я использовал очень похожий код.Вы получаете количество секунд между двумя моментами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...