2017-06-06 72 views
0

我有兩個不同的休息時間PHP和兩個不同的分

  1. 默認休息時間
  2. 額外的休息時間

在這裏,我要總結的兩次,顯示12小時格式

EX:

$default_time = "00:30"; 
$extra_time = "00:25"; 

我的預期輸出:00:55

但現在顯示01:00

這是我的代碼

$default_time = $work_data->break_time; 
$break_time = $work_data->extra_time; 
$total_break = strtotime($default_time)+strtotime($break_time); 
echo date("h:i",strtotime($total_break)); 

回答

2

這裏是你可以通過計算總時間的函數將參數傳遞給函數。

$小時,$分鐘應該變量,它是零

$default_time = "00:30"; 
$break_time = "00:25"; 
function calculate_total_time() { 
    $i = 0; 
    foreach(func_get_args() as $time) { 
     sscanf($time, '%d:%d', $hour, $min); 
     $i += $hour * 60 + $min; 
    } 

    if($h = floor($i/60)) { 
     $i %= 60; 
    } 

    return sprintf('%02d:%02d', $h, $i); 
} 

// use example 
echo calculate_total_time($default_time, $break_time); # 00:55 
+0

謝謝工作好.. –

0
<?php 
    $time = "00:30"; 
    $time2 = "00:25"; 

    $secs = strtotime($time2)-strtotime("00:00:00"); 
    $result = date("H:i:s",strtotime($time)+$secs); 
    print_r($result); 
?> 
+0

我想知道什麼是背後的strtotime邏輯倍($時間2) - strtotime(「00:00:00」) –

0

有一個函數調用strtotime功能太多。

你應該排除在最後一行strtotime()調用,如$total_break已經是UNIX時間戳:

$total_break = strtotime($default_time)+strtotime($break_time); 
echo date("h:i",$total_break); 
+0

如果我刪除strtotime()在回聲輸出是** 03:26 ** –

0

的問題是,你想添加過多的具體時間戳,但是你在做什麼試圖實現增加兩個持續時間。所以你需要將這些時間戳轉換爲持續時間。爲此,你需要一個基地,在你的情況下是00:00。

$base = strtotime("00:00"); 

$default_time = $work_data->break_time; 
$default_timestamp = strtotime($default_time); 
$default_duration = $default_timestamp - $base; // Duration in seconds 

$break_time = $work_data->extra_time; 
$break_timestamp = strtotime($break_time); 
$break_duration = $break_timestamp - $base; // Duration in seconds 

$total_break = $default_duration + $break_duration; // 55 min in seconds 

// If you want to calculate the timestamp 00:55, just add the base back to it 
echo date("H:i", $base + $total_break); 
0

考慮使用標準DateTimeDateInterval類。所有你需要的是你的第二個變量的值轉換爲interval_spec格式(見http://php.net/manual/en/dateinterval.construct.php瞭解詳細信息):

$defaultTime = "00:30"; 
$breakTime = "PT00H25M"; // Or just 'PT25M' 

$totalBreak = (new DateTime($defaultTime))->add($breakTime); 
echo $totalBreak->format('H:i'); 
0

你可以嘗試下面的代碼片段:

$time1 = explode(":", $default_time); 
$time2 = explode(":", $break_time); 
$fulltime = ($time1[0] + $time2[0]) * 60 + $time1[1] + $time2[1]; 
echo (int)($fulltime/60) . ":" . ($fulltime % 60); 
0

下面的代碼使用,你一定會得到你的答案。

$default_time = "00:30:00"; 
$extra_time = "00:25:00"; 

$secs = strtotime($extra_time)-strtotime("00:00:00"); 
$result = date("H:i:s A",strtotime($default_time)+$secs); 
echo $result;die; 

您可以根據需要修改上述代碼。

0

你可以嘗試以下方法:

$default_time = $work_data->break_time; 
$date_start = new DateTime($default_time); 
$break_time = $work_data->extra_time; 
$interval = new DateInterval("PT" . str_replace(":", "H", $break_time) . "M"); 
$date_end = $date_start->add($interval); 
echo $date_end->format("H:i"); 

注意,這不能解釋其跨越24小時內

相關問題