【问题标题】:PHP sum two different minutesPHP总和两个不同的分钟
【发布时间】:2017-06-06 06:35:33
【问题描述】:

我有两个不同的休息时间

  1. 默认休息时间
  2. 额外的休息时间

这里我想求和两次并显示 12 小时格式

前:

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

【问题讨论】:

    标签: php datetime time datetime-format


    【解决方案1】:

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

    $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
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 如果我在 echo 输出中删除 strtotime() 是 03:26
      【解决方案3】:

      问题是您尝试添加太具体的时间戳,但您想要实现的是添加两个持续时间。因此,您需要将这些时间戳转换为持续时间。为此,您需要一个基地,在您的情况下是 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】:

        考虑使用标准的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】:

          你可以试试下面的代码片段:

          $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】:
            <?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);
            ?>
            

            【讨论】:

            • 我想知道strtotime($time2)-strtotime("00:00:00")背后的逻辑是什么
            【解决方案7】:

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

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

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

            【讨论】:

              【解决方案8】:

              您可以尝试以下方法:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2015-01-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多