PHP总结两个不同的分钟

时间:2017-06-06 06:35:33

标签: php datetime time datetime-format

我有两个不同的休息时间

  1. 默认休息时间
  2. 额外休息时间
  3. 这里我要两次相加并显示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));
    

8 个答案:

答案 0 :(得分:2)

以下是通过将参数传递给函数来计算总时间的函数。

$ hours,$ min假设变量为零

$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

答案 1 :(得分:0)

O(n)

答案 2 :(得分:0)

strtotime函数有一个函数调用太多了。

您应该在最后一行中忽略strtotime()调用,因为$total_break已经是UNIX时间戳:

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

答案 3 :(得分: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);

答案 4 :(得分: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');

答案 5 :(得分: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);

答案 6 :(得分: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;

您可以根据需要修改上述代码。

答案 7 :(得分: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小时的时间