добавить часы:мин:сек на сегодняшний день в PHP


Я пытаюсь добавить чч:мм:сс с датой. Как я могу это сделать?

Я пробовал со следующим, но это работает, когда час является строкой, но когда время добавления похоже на дату 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 ?

Как я могу это добавить?

Author: Jens, 2015-10-09

3 answers

Использовать 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');

Демо-версия

 6
Author: John Conde, 2015-10-09 12:55:00

Вы также можете преобразовать время в секунды с помощью этого подхода из: Преобразовать время в формате ЧЧ:ММ:СС только в секунды?

$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'));

Если вы предпочитаете использовать объекты DateTime, предлагаемые @John Conde, вот два способа преобразования строки времени в формат:

$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');
 2
Author: user2182349, 2017-05-23 12:17:57
 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));

Может быть решением.

 1
Author: statelessMind, 2015-10-09 12:12:18