Как создать DateInterval из строки времени
Если у меня есть строка формата времени, например "14:30:00" ("часы: минуты: секунды"), как мне получить DateInterval из строки?
Я могу получить DateTime:
$datetime= DateTime::createFromFormat("H:i:s","14:30:00");
Но мне нужно добавить его в другой объект DateTime, а date_add нужен DateInterval.
1 ответ
Решение
Если вы хотите интервал, который составляет 14 часов и 30 минут, просто используйте конструктор...
$interval = new DateInterval('PT14H30M');
Чтобы сломать это...
P
- все строки спецификации интервала должны начинаться сP
(за период). Мы не используем интервалы периода, хотя так далее...T
- это запускает спецификацию Time14H
- 14 часов30M
- 30 минут
Если вы должны использовать строку 14:30:00, я бы проанализировал ее sscanf
и использовать части...
list($hours, $minutes, $seconds) = sscanf('14:30:00', '%d:%d:%d');
$interval = new DateInterval(sprintf('PT%dH%dM%dS', $hours, $minutes, $seconds));