我想为现有日期添加时间。我有 2 个字符串变量:
$date = "2013-01-05 10:55:15";
$interval = "50:25:10";
我想计算最终日期"2013-01-07 13:20:25"。时间中的小时数可以大于 23,这意味着此间隔可以大于一整天。
最好的方法是什么?
使用 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
定义的更多信息,请访问此页面:
日期间隔
格式以字母 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");
这有点棘手。
通常,如果它是一个静态周期,或者是一个单一的周期类型,你会在这里做什么,大致如下:
$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
您可以先分解间隔,然后获取小时、分钟、秒,然后使用 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');
演示!
使用 DateInterval 和 DateTime->add():
$date = new DateTime("2013-01-05 10:55:15");
$date->add(new DateInterval("PT50H25M10S"));
如果有人需要基于上面的答案,我做了我的函数:
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");
}
希望它对某人有所帮助