如何从时间字符串创建日期间隔



如果我有一个时间格式字符串,如"14:30:00"("小时:分钟:秒"),如何从字符串中获取日期间隔?

我可以得到一个日期时间:

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

但是我需要将其添加到另一个 DateTime 对象,date_add需要一个 DateInterval。

如果您想要一个 14 小时 30 分钟的间隔,只需使用构造函数...

$interval = new DateInterval('PT14H30M');

分解一下...

  • P - 所有间隔规范字符串必须以 P 开头(对于周期)。我们没有使用任何周期间隔,等等...
  • T - 这将启动时间规范
  • 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));

最新更新