将 hours:min:sec 添加到 PHP 中的日期

add hours:min:sec to date in PHP

我正在尝试添加 hh:mm:ss 日期。我该怎么做?

我尝试了以下方法,但是当小时是字符串时它可以工作,但是当添加时间类似于 MySQL 日期时间时它不起作用。

$new_time = date("Y-m-d H:i:s", strtotime('+5 hours'));

我正在尝试为以下问题寻求解决方案:

$timeA= '2015-10-09 13:40:14'; 

$timeB = '03:05:01';  // '0000-00-00 03:05:01'

输出:

$timeA + $timeB = 2015-10-09 16:45:15 ?

如何添加这个?

使用DateInterval():

$timeA = new DateTime('2015-10-09 13:40:14');
$timeB = new DateInterval('PT3H5M1S'); // '03:05:01'; 
$timeA->add($timeB);
echo $timeA->format('Y-m-d H:i:s');

您需要将时间分解为正确的 DateInterval 格式,但使用 explode();

即可轻松完成

这可能是这样的:

$parts = array_map(function($num) {
    return (int) $num;
}, explode(':', '03:05:01'));

$timeA = new DateTime('2015-10-09 13:40:14');
$timeB = new DateInterval(sprintf('PT%uH%uM%uS', $parts[0], $parts[1], $parts[2]));
$timeA->add($timeB);
echo $timeA->format('Y-m-d H:i:s');

Demo

 print date('Y-m-d H:i:s',strtotime($timeA." +03 hour +05 minutes +01 seconds"));  

应该也可以。

所以:

$timeA= '2015-10-09 13:40:14'; 

$timeB = vsprintf(" +%d hours +%d minutes +%d seconds", explode(':', '03:05:01')); 

print date('Y-m-d H:i:s',strtotime($timeA.$timeB));

可以解决。

您也可以使用以下方法将时间转换为秒:Convert time in HH:MM:SS format to seconds only?

$time = '03:05:01';
$seconds = strtotime("1970-01-01 $time UTC");

然后你可以把秒数加到

$currentTime = '2015-10-10 13:40:14';
$newTime = date("Y-m-d H:i:s", strtotime( $currentTime.'+'.$seconds.' seconds'));

如果您更喜欢使用@John Conde 提供的 DateTime 对象,可以通过以下两种方法将时间字符串转换为以下格式:

$formattedTime = preg_replace("/(\d{2}):(\d{2}):(\d{2})/","PTHMS","03:05:11");

或者,当您从数据库中读取它时:

select concat(hour(last_modified),'H',minute(last_modified),'M',second(last_modified),'H') from people;

所以更通用的代码方法是:

$initial = 'some time';
$interval = 'the interval value';

$initialTime = new DateTime($initial);
$intervalTime = new DateInterval($interval);
$initialTime->add($intervalTime);
echo $initialTime->format('Y-m-d H:i:s');