在PHP中添加时间间隔的最佳方法是什么?

时间:2013-09-26 19:01:41

标签: php

我想为现有日期添加时间。我有2个字符串变量:

$date     = "2013-01-05 10:55:15";
$interval =            "50:25:10";

我想计算最终日期“2013-01-07 13:20:25”。小时数可以大于23,这意味着这个时间间隔可能超过一整天。

最好的方法是什么?

5 个答案:

答案 0 :(得分:9)

使用DateTime API

$date = new DateTime("2013-01-05 10:55:15");
$date->add(new DateInterval("PT50H25M10S"));

然后你可以将它转换回字符串,使用与date()函数相同的日期格式,如果你想:

$string = $date->format("Y-m-d H:i:s");

有关DateInterval定义的详细信息,请访问此页面:

DateInterval

  

格式以字母P开头,表示“期间”。每个持续时间   句点由整数值后跟句点表示   代号。如果持续时间包含时间元素,那部分   规范前面是字母T.

     

以下是一些简单的例子。两天是P2D。两秒钟是PT2S。   P6YT5M是六年零五分钟。

所以在这种情况下PT50H25M10S表示50小时25分10秒

请注意,DateInterval仅在PHP 5.3之后可用,如果您必须使用较低版本,则可以使用以下内容:

 $time = strtotime("2013-01-05 10:55:15");
 $time += 55*60*60 + 25*60 + 10;
 $newDate = date("Y-m-d H:i:s");

答案 1 :(得分:5)

这有点棘手。

通常情况下,如果它是一个静态期间,或者是一个单一期间类型,你会在这里做的是:

$date = "2013-01-05 10:55:15";
$time = new DateTime($date);
$time->add(new DateInterval('PT5M'));

这将为日期时间增加5分钟。但是我怀疑你可以通过整个时间间隔。所以你可能要做的就是将间隔分开:然后将间隔的每个部分(我认为它是动态的?)分别添加到日期。所以先是小时,然后是几分钟,然后是几秒钟

有关详情,请参阅此处:http://www.php.net/manual/en/datetime.add.php

答案 2 :(得分:4)

使用DateIntervalDateTime->add()

$date = new DateTime("2013-01-05 10:55:15");
$date->add(new DateInterval("PT50H25M10S"));

答案 3 :(得分:3)

您可以先爆炸间隔,然后获取小时,分钟,秒,然后使用DateTime的add()添加间隔,如下所示:

$interval = '50:25:10';
$datestring = '2013-01-05 10:55:15';    
list($hours, $minutes, $seconds) = explode(':', $interval); 

$date = new DateTime($datestring);    
$date->add(new DateInterval('PT'.$hours.'H'.$minutes.'M'.$seconds.'S'));
echo $date->format('Y-m-d H:i:s');

Demo!

答案 4 :(得分:1)

如果有人根据上面的答案需要,我的功能就像这样:

public function addTime($date, $time) {
    $atime = explode(":", $time);
    $_date = date_create_from_format("Y-m-d H:i:s", $date);
    $_date->add(new DateInterval("PT" . intval($atime[0])."H".intval($atime[1])."M".intval($atime[2])."S"));
    return $_date->format("Y-m-d H:i:s");
}

希望它可以帮助某人