我正在尝试编写一个函数,将时间戳添加到一起以获得所有的总和。例如: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);
答案 0 :(得分:7)
问题如下,你确实要添加“时间”,但事实上你正在创建“日期”的总和。 strtotime
需要两个参数:#1是日期,#2是偏移量(如果没有给出,则为“现在”)。
这只是一个黑客,我不确定是否有人会这样使用它,但它有效:
<?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,就这样使用它。
答案 1 :(得分:0)
添加时间时,您无法使用旧的PHP strtotime
/ date
函数,尤其是如果您只想将结果显示为hours:minutes
。例如,如果您最终超过24小时,“时钟”将重置。
您应该做的是计算总分钟数(如果有必要,计算秒数),然后根据需要格式化结果。
请查看Convert number of minutes into hours & minutes using PHP以了解后一部分的代码示例。
答案 2 :(得分: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