我想为现有日期增加时间.我有2个字符串变量:
$date = "2013-01-05 10:55:15";
$interval = "50:25:10";
Run Code Online (Sandbox Code Playgroud)
我想计算最终日期"2013-01-07 13:20:25".小时数可以大于23,这意味着这个时间间隔可能超过一整天.
最好的方法是什么?
sie*_*iej 11
使用DateTime API:
$date = new DateTime("2013-01-05 10:55:15");
$date->add(new DateInterval("PT50H25M10S"));
Run Code Online (Sandbox Code Playgroud)
然后你可以将它转换回字符串,使用与date()函数相同的日期格式,如果你想:
$string = $date->format("Y-m-d H:i:s");
Run Code Online (Sandbox Code Playgroud)
有关DateInterval定义的更多信息,请访问此页面:
格式以字母P开头,表示"期间".每个持续时间段由整数值表示,后跟句点指示符.如果持续时间包含时间元素,则说明书的该部分前面带有字母T.
这是一些简单的例子.两天是P2D.两秒钟是PT2S.P6YT5M是6年零5分钟.
所以在这种情况下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");
Run Code Online (Sandbox Code Playgroud)
这有点棘手.
通常情况下,如果它是一个静态期间,或者是一个单一期间类型,你会在这里做什么,是这样的:
$date = "2013-01-05 10:55:15";
$time = new DateTime($date);
$time->add(new DateInterval('PT5M'));
Run Code Online (Sandbox Code Playgroud)
这将为日期时间增加5分钟.但是我怀疑你可以通过整个时间间隔.所以你可能要做的是将间隔分开:然后将间隔的每个部分(我假设它是动态的?)分别添加到日期.所以先是小时,然后是几分钟,然后是秒
有关这方面的更多信息,请访问:http://www.php.net/manual/en/datetime.add.php
您可以首先分解间隔,然后获取小时、分钟、秒,然后使用 DateTimeadd()添加间隔,如下所示:
$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');
Run Code Online (Sandbox Code Playgroud)
使用DateInterval和DateTime-> add():
$date = new DateTime("2013-01-05 10:55:15");
$date->add(new DateInterval("PT50H25M10S"));
Run Code Online (Sandbox Code Playgroud)