2016-05-11 5 views

ответ

0

Вы должны преобразовать все значения в секундах. Таким образом, вы можете преобразовать ваше время потратить с помощью этого

$str_time = "2:50"; 

sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds); 

$timeSeconds = isset($seconds) ? $hours * 3600 + $minutes * 60 + $seconds : $hours * 60 + $minutes; 

Затем вы можете конвертировать часов до нескольких секунд путем умножения на 3600

$totalSeconds = $totalHours * 3600; 

Тогда вы можете вычитать друг от друга, чтобы получить оставшиеся секунды.

$remainingSeconds = $totalSeconds - $timeSeconds; 

Затем отформатировать его обратно в то время

$timeText = gmdate("H:i:s", remainingSeconds); 
+0

спасибо. это работает, но в случае, если timeSpend больше, чем общее количество часов, он терпит неудачу i $ totalHours = 30; $ timeSpend = 31: 22: 00 ineed answer -01: 22: 00 – Asif

+0

Вы должны проверить, осталось ли оставшиеся секунды <0, прежде чем вы измените формат назад. – Brett

0

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

$remaining = $totalhours - $timespend; 
echo $remaining; 
2

Вы можете попробовать любой из подходов. Подход NR. 1 является многолинейным, хотя и немного более подробным:

ПОДХОД КОД. 1

<?php 
    $totalHours = 16; 
    $timeSpend = "13:22:00"; 
    $baseDate = "2016-05-11"; 
    $result  = null; 
    $dateDiff = null; 

    // CONVERT BOTH $totalHours AND $timeSpend TO DATETIME OBJECTS USING AN ARBITRARY DATE AS BASE::: 
    // HERE WE USED THE DATE: 2016-05-11 BUT YOU CAN USE ANY DATE. 
    $date1  = new DateTime($baseDate); 
    $date2  = new DateTime($baseDate . " " . $timeSpend); 

    //ADD 30 HOUR TO $date1 
    $date1->add(new DateInterval('PT' . $totalHours . "H")); 

    //FIND THE DIFFERENCE BETWEEN THE 2. 
    $dateDiff = date_diff($date2, $date1); 

    // IF $date1 IS GREATER THAN $date2; SIMPLY ASSIGN THE DATE DIFFERENCE TO $dateDiff 
    // ELSE ASSIGN NULL TO $dateDiff 
    if(($date1 > $date2)){ 
     $dateDiff = date_diff($date2, $date1); 

     //NOW FINALLY GET THE HOURS, MINUTES & SECONDS FROM THE RESULT 
     $hour  = ($dateDiff->h < 10)? "0".$dateDiff->h : $dateDiff->h; 
     $min  = ($dateDiff->i < 10)? "0".$dateDiff->i : $dateDiff->i; 
     $sec  = ($dateDiff->s < 10)? "0".$dateDiff->s : $dateDiff->s; 
     $result  = $hour . ":" . $min . ":" . $sec; 
    }else{ 
     $dateDiff = null; 
    } 

    //TEST YOUR RESULT... 
    var_dump($result);  //DUMPS '16:38:00' TO THE OUTPUT STREAM... 

ПОДХОД NR. 2

<?php 
     $totalHours = 30; 
     $timeSpend = "13:22:00"; 

     // CONVERT BOTH $totalHours & $timeSpend TO UNIX TIMESTAMP. 
     $time1  = $totalHours * 60* 60; 
     $time2  = strtotime($timeSpend); 

     // CHECK IF $totalHours IS GREATER THAN $timeSpent 
     // IF IT IS; SUBTRACT $timeSpent FROM $totalHours 
     // AND ASSIGN THE DIFFERENCE TO $diff 
     // OTHERWISE ASSIGN NULL TO $diff 
     $diff  = ($time1 > $time2) ? ($time1 - $time2) :null; 

     // NOW REFORMAT DIFF USING PHP'S date FORMATTING FUNCTION: 
     $diffTime = date("H:i:s", $diff); 

     // JUST DO SOME TESTS TO SEE YOUR RESULT DUMPED TO THE OUTPUT STREAM: 
     var_dump($diffTime); 
Смежные вопросы