Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a DateInterval from a time string

If I have a time format string like "14:30:00" ("hours:minutes:seconds"), how do I get a DateInterval from the string?

I can get a DateTime:

$datetime= DateTime::createFromFormat("H:i:s","14:30:00");

But I need to add it to another DateTime object, and date_add needs a DateInterval.

like image 736
Ramy Al Zuhouri Avatar asked Feb 12 '14 23:02

Ramy Al Zuhouri


Video Answer


1 Answers

If you want an interval that is 14 hours and 30 minutes, simply use the constructor...

$interval = new DateInterval('PT14H30M');

To break it down...

  • P - all interval spec strings must start with P (for Period). We aren't using any period intervals though so on to...
  • T - this starts the Time spec
  • 14H - 14 hours
  • 30M - 30 minutes

If you must use the string 14:30:00, I'd parse it with sscanf and use the parts...

list($hours, $minutes, $seconds) = sscanf('14:30:00', '%d:%d:%d');
$interval = new DateInterval(sprintf('PT%dH%dM%dS', $hours, $minutes, $seconds));
like image 100
Phil Avatar answered Oct 21 '22 09:10

Phil