добавить часы:мин:сек на сегодняшний день в 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 ?
Как я могу это добавить?
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');
Вы также можете преобразовать время в секунды с помощью этого подхода из: Преобразовать время в формате ЧЧ:ММ:СС только в секунды?
$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');
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));
Может быть решением.