2014-02-12 62 views
4

如果我有一個像「14:30:00」(「hours:minutes:seconds」)的時間格式字符串,如何從字符串中獲取DateInterval?如何從時間字符串創建DateInterval

我可以得到一個DateTime:

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

但我需要將它添加到另一個DateTime對象,並DATE_ADD需要DateInterval。

回答

14

如果你想要一個間隔爲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)); 
+0

愛sscanf方法!謝謝 – Tiagojdferreira

+0

是的,sscanf方法在從數據庫中抽出時間的時候非常出色。這個功能在DateTime庫中確實是缺少的。 – MacroMan

+0

如果你喜歡這個列表/ sscanf組合,你必須愛蟒蛇:) –