【问题标题】:Adding timestamps together to get total hours and minutes [duplicate]将时间戳加在一起以获得总小时数和分钟数[重复]
【发布时间】:2013-01-05 09:53:44
【问题描述】:

我正在尝试编写一个将时间戳加在一起以获得所有总和的函数。例如:11:30 + 12:00 + 15:35 = 39:05 我不确定如何实现这一点。我在下面包含了我尝试过的代码,但它没有给出预期的结果:

$TotalTime = strtotime($data['TotalSunday']) + strtotime($data['TotalMonday']) 
    + strtotime($data['TotalTuesday'])
    + strtotime($data['TotalWednesday'])    + strtotime($data['TotalThursday'])
    + strtotime($data['TotalFriday']) + strtotime($data['TotalSaturday']);
    $data['TotalTime'] = gmdate("h:i", $TotalTime);

【问题讨论】:

  • 你得到了什么结果?
  • 这样做的目的是什么?你想达到什么目的?
  • @SaladinAkara 08:33 是我使用上述代码得到的结果。我正在创建一个用于学习目的的在线考勤卡系统。
  • 我得到9512112600,我猜这是我在几秒钟内寻找的值。 (不是我发布的示例值)

标签: php


【解决方案1】:

在添加计时时不能使用旧的 php strtotime/date 函数,特别是如果您只想将结果显示为 hours:minutes。例如,如果您的时间超过 24 小时,“时钟”将重置。

您应该做的是计算总分钟数(或秒数,如果需要的话),然后根据需要格式化结果。

Convert number of minutes into hours & minutes using PHP后面部分的代码示例。

【讨论】:

    【解决方案2】:

    你可以尝试这样的事情(我玩了一些 DateTime 和 DateInterval,但要小心,因为这些类仅在 PHP 5.2+ 中可用。

    $interval1 = new DateInterval('P0000-00-00T10:00:00');
    $interval2 = new DateInterval('P0000-00-00T11:00:00');
    $interval3 = new DateInterval('P0000-00-00T03:45:00');
    // format:                     YYYYY-MM-DDTHH:MM:SS
    
    $date = new DateTime('00:00:00');
    $date2 = clone $date;
    $date2->add($interval1);
    $date2->add($interval2);
    $date2->add($interval3);
    
    echo "Sum between the intervals:", $date2->diff($date)->format("%D:%H:%I"); // prints 01:00:45
    // OR you can do the following
    $diff = $date2->getTimestamp() - $date->getTimestamp(); // difference in seconds
    // floor($diff / 3600) is the number of hours, for example
    

    【讨论】:

      【解决方案3】:

      问题如下,您确实想添加“时间”,但实际上您正在创建“日期”的总和。 strtotime 需要两个参数:#1 是日期,#2 是偏移量(如果没有给出,则为“现在”)。

      这只是一个 hack,我不确定是否有人会这样使用它,但它确实有效:

      <?php
      
          $time1 = strtotime("00:25Z", 0);
          $time2 = strtotime("23:20:05Z", 0);
      
          $sumTime = $time1 + $time2;
      
          $hours = $sumTime / 3600;
          $minutes = ($sumTime % 3600) / 60;
      
          echo sprintf("%d:%d", $hours, $minutes); // Outputs: 23:45
      
      ?>
      

      通过将第二个参数设置为 0,并为 datetime 参数提供额外的 Z(对于 Zulu 时间或 UTC),以秒为单位正确解析 23:59:59 之前的时间。

      所以如果你真的想依赖strtotime,就这样使用吧。

      【讨论】:

        【解决方案4】:

        为了避免 24 小时后更改日期,我使用了这种方法。这取决于时间格式始终为 hh:mm(:ss) 但之前没有日期。 对于处理 mySQL 日期字段很有用。

        $timeString[] = array ('11:30', '1:00' , ...);
        
        foreach ( $timeString as mytime) {
          $time         = explode(':' , $mytime);
          $tMin     +=   $time[1]   ;
          $tHour    +=   $time[0]   ;
        }
            
        $tHour  += floor ( $tMin / 60   ) ;
        $tMin   =   $tMin % 60  ;
        
        echo "total time: " . $tHour .':'.$tMin ;
        

        【讨论】:

          猜你喜欢
          • 2019-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-22
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多