将时间戳添加到一起以获得总小时和分钟

时间:2013-01-22 07:59:06

标签: php

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

3 个答案:

答案 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