1

我正在尝试编写一个函数,它将时间戳加在一起以获得所有的总和。例如: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);
4

4 回答 4

7

问题如下,您确实想添加“时间”,但实际上您正在创建“日期”的总和。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,就这样使用它。

于 2013-01-22T08:21:06.130 回答
0

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

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

看一下使用 PHP 将分钟数转换为小时和分钟以获取后面部分的代码示例。

于 2013-01-22T08:16:18.950 回答
0

你可以尝试这样的事情(我玩了一些 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
于 2013-01-22T08:17:10.977 回答
0

为了避免 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 ;
于 2021-10-29T14:56:07.627 回答