Как создать 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 - это запускает спецификацию Time
  • 14H - 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));
Другие вопросы по тегам