【问题标题】:Calculate difference between 2 times in hours in PHP在 PHP 中计算 2 小时之间的差异
【发布时间】:2013-05-28 13:53:30
【问题描述】:

我有两次—— 例如 - 当前时间 - 08:24 和日期是 dd/mm/yyyy 格式的 02/01/2013 我在 13:46 有另一个时间,日期是 31/12/2012 。那么,如何使用 PHP 计算 2 小时之间的差异。 (即 42.63 小时) 提前致谢。

【问题讨论】:

  • 您要查找的术语是“日期算术”。

标签: php datetime time date-arithmetic


【解决方案1】:

如果您将日期作为时间戳(如果需要,请使用 strtotime),然后将它们相减,可选择取绝对值,然后除以 3600(一小时的秒数)。简单^_^

【讨论】:

    【解决方案2】:

    将它们都转换为时间戳值,然后减去以秒为单位。

    $ts1 = strtotime(str_replace('/', '-', '02/01/2013 08:24'));
    $ts2 = strtotime(str_replace('/', '-', '31/12/2012 13:46'));
    $diff = abs($ts1 - $ts2) / 3600;
    

    【讨论】:

    • 已编辑:strtotime 解析为 m/d/y 或 d-m-y,因此在解析前将 / 转换为 -
    • 它给出了差异,但它没有告诉我差异是正面的还是负面的
    • 如果您需要保留差异的符号,您可以删除 abs() 调用。 ($ts1 - $ts2) / 3600
    • 是的,我没注意到是我的错
    【解决方案3】:

    另一种方法是使用 PHP 的日期相关类。下面的示例使用DateTime::diff() 获取DateInterval 对象($interval)。然后,它使用区间的属性得出区间内的总小时数。

    $a = DateTime::createFromFormat('H:i d/m/Y', '08:24 02/01/2013');
    $b = DateTime::createFromFormat('H:i d/m/Y', '13:46 31/12/2012');
    
    $interval = $a->diff($b);
    $hours    = ($interval->days * 24) + $interval->h
              + ($interval->i / 60) + ($interval->s / 3600);
    
    var_dump($hours); // float(42.633333333333)
    

    【讨论】:

      【解决方案4】:

      我有一个简单的解决方案,试试这个 -

      echo getTimeDiff("10:30","11:10");
      
      function getTimeDiff($dtime,$atime)
          {
              $nextDay = $dtime>$atime?1:0;
              $dep = explode(':',$dtime);
              $arr = explode(':',$atime);
              $diff = abs(mktime($dep[0],$dep[1],0,date('n'),date('j'),date('y'))-mktime($arr[0],$arr[1],0,date('n'),date('j')+$nextDay,date('y')));
              $hours = floor($diff/(60*60));
              $mins = floor(($diff-($hours*60*60))/(60));
              $secs = floor(($diff-(($hours*60*60)+($mins*60))));
              if(strlen($hours)<2){$hours="0".$hours;}
              if(strlen($mins)<2){$mins="0".$mins;}
              if(strlen($secs)<2){$secs="0".$secs;}
              return $hours.':'.$mins.':'.$secs;
          }
      

      【讨论】:

        【解决方案5】:

        我认为以下代码有助于了解如何使用 PHP 计算时差

        function date_diff($date_1 , $date_2 , $format) {
            $datetime1 = date_create($date_1);
            $datetime2 = date_create($date_2);
        
            $diff = date_diff($datetime1, $datetime2);
        
            return $diff->format($format);
        }
        

        上面的函数对于计算两次和日期之间的差异很有用。日期作为输出格式的参数给出。

        输出格式如下:

        // '%y 年 %m 月 %d 日 %h 小时 %i 分 %s 秒' => 1 年 3 月 14 日 11 小时 49 分 36 秒 // '%y 年 %m 月 %d 日' => 1 年 3 月 14 天 // '%m 月 %d 天' => 3 个月 14 天 // '%d 天 %h 小时' => 14 天 11 小时 // '%d 天' => 14 天 // '%h 小时 %i 分钟 %s 秒' => 11 小时 49 分钟 36 秒 // '%i 分 %s 秒' => 49 分 36 秒 // '%h 小时 => 11 小时 // '%a 天

        【讨论】:

          【解决方案6】:

          只要把这个放在这里,对于需要在HoursMinutes 'AND' Seconds!! 中找出两个日期/时间戳之间的差异的人来说!!

          $futureDate_raw = '12/13/2018'; // This is your finish date.
          $fdate = strtotime($futureDate_raw);
          
          $hours   = (($fdate - time()) / 3600;
          $mins    = (($fdate - time()) % 3600) / 60;
          $seconds = ((($fdate- time()) % 3600) % 60);
          

          【讨论】:

            【解决方案7】:

            我发现这是查找时差的最简单方法,它总是对我有用

            $timestamp1 = strtotime(date('Y-m-d H:i'));
            $timestamp2 = strtotime("2020-04-05 18:00");
            
              $diff = abs($timestamp2 - $timestamp1)/(60*60);
            echo $diff;
            

            【讨论】:

              猜你喜欢
              • 2018-04-02
              • 2017-04-06
              • 2010-11-07
              • 1970-01-01
              • 2015-03-14
              • 2012-09-18
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多