在PHP中将小时:分:秒添加到日期

7

我想要将时间 hh:mm:ss 与日期相加,我该怎么做?

我已经尝试了以下方法,但只有当小时是字符串时才有效,当添加的时间类似于 MySQL Date time 时并不能起作用。

$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 ?

我该如何添加这个功能?
3个回答

9

使用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


在我的数据库中,值将以“03:05:01”的格式显示,我如何将其转换为所有格式? - DonOfDen
你可以将日期时间格式分解为较小的部分,并动态生成日期。但这需要更多的工作。 - John Conde
那如果我需要以这种格式添加第二个日期“2015-10-09 13:40:14”呢?@约翰 - DonOfDen
嗯,你做同样的事情。 - John Conde

2
 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));

可以成为解决方案。

2
您也可以使用以下方法将时间转换为秒,该方法来源于:将HH:MM:SS格式的时间转换为仅秒?
$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})/","PT$1H$2M$3S","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');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接