Php 两个不同的分钟

Php 两个不同的分钟,php,datetime,time,datetime-format,Php,Datetime,Time,Datetime Format,我有两个不同的休息时间 默认中断时间 额外休息时间 这里我想求两次和并显示12小时格式 例: 我的预期输出: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",strtoti

我有两个不同的休息时间

  • 默认中断时间
  • 额外休息时间
  • 这里我想求两次和并显示12小时格式

    例:

    我的预期输出: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));
    
    
    

    这是一个函数,您可以通过将参数传递给函数来计算总时间

    $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
    

    这是一个函数,您可以通过将参数传递给函数来计算总时间

    $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
    

    strotime
    函数的一个函数调用太多

    您应该在最后一行中省略
    strotime()
    调用,因为
    $total\u break
    已经是UNIX时间戳:

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

    strotime
    函数的一个函数调用太多

    您应该在最后一行中省略
    strotime()
    调用,因为
    $total\u break
    已经是UNIX时间戳:

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

    问题是您试图添加太特定的时间戳,但您试图实现的是添加两个持续时间。因此,您需要将这些时间戳转换为持续时间。为此,你需要一个基地,在你的情况下是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);
    

    问题是您试图添加太特定的时间戳,但您试图实现的是添加两个持续时间。因此,您需要将这些时间戳转换为持续时间。为此,你需要一个基地,在你的情况下是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);
    

    考虑使用标准的
    DateTime
    DateInterval
    类。您只需将第二个变量值转换为
    interval\u spec
    格式(有关详细信息,请参阅):


    考虑使用标准的
    DateTime
    DateInterval
    类。您只需将第二个变量值转换为
    interval\u spec
    格式(有关详细信息,请参阅):


    您可以尝试以下代码片段:

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

    您可以尝试以下代码片段:

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

    使用下面的代码你一定会得到你的答案

    $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;
    

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

    使用下面的代码您肯定会得到答案

    $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;
    

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

    您可以尝试以下操作:

    $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小时的时间,您可以尝试以下方法:

    $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小时的时间

    如果我在echo输出中删除strottime()是03:26如果我在echo输出中删除strottime()是03:26我想知道strottime($time2)-strottime(“00:00:00”)背后的逻辑是什么,我想知道strottime($time2)-strottime(“00:00”)背后的逻辑是什么