2016-11-21 85 views
0

我想字符串轉換爲時間, 字符串我已經都是這種格式, 「1個小時」,「1小時」,「2小時30分鐘」,「3小時45分鐘」字符串轉換爲時間

我想將它們轉換爲H:i:s格式。所以它看起來如3:45:00

當前我正在使用str_pos在hr之前獲取字符,並將它們剝離並將它們加入以形成h:i:s格式。

$data = strtolower($data); 
$hours = '00'; 
$minutes = '00'; 
$seconds = '00'; 

$pos = strpos($data, "h"); 
if ($pos !== false) { 
    $hours = str_replace([' ', ':', ','], '', substr($data, 0, $pos)); 
    $data = str_replace(['hours', 'hour', 'hrs', 'hr'], '', substr($data, $pos)); 
} 

$pos = strpos($data, "m"); 
if ($pos !== false) { 
    $minutes = str_replace([' ', ':', ','], '', substr($data, 0, $pos)); 
    $data = str_replace(['minutes', 'minute', 'mins', 'min'], '', substr($data, $pos)); 
} 

$pos = strpos($data, "s"); 
if ($pos !== false) { 
    $seconds = str_replace([' ', ':', ','], '', substr($data, 0, $pos)); 
} 

return $hours . ':' . $minutes . ':' . $seconds; 

類似於分鐘....

沒有更好的和簡單的方法來做到這一點?無論如何,我可以使用DateTime方法嗎?

+0

https://eval.in/681782。這是你想要的嗎? –

+0

不好,但應該工作:'$ string ='3小時45分鐘'; $ dateTime = DateTime :: createFromFormat('h \ h \ o \ ur i \ m \ i \ n \ u \ t \ e \ s',$ string); var_dump($ dateTime-> format('H:i:s'));' – swidmann

+0

Abhishek Salian查看評論和答案,讓我們知道 –

回答

1
$time = str_replace(['hr', 'mins'], ['hours', 'minutes'], $string); 

$dateTime = new DateTime('midnight'); 
$dateTime->modify('+' . $time); 

var_dump($dateTime->format('H:i:s')); 
+1

這就是魔術, 非常感謝。 –

0

用正則表達式?

<?php 
$s = "3 hr 45 minutes"; 

preg_match("#([0-9]+)[ hour]+ ([0-9]+)[ minutes]+#", $s, $m); 

echo "$m[1]:$m[2]:00"; 

?> 
+0

如果字符串格式會改變,那麼我恐怕它不會工作 –

+0

是說與「1小時10分鐘」說,但如果我通過「1小時」或「10分鐘」它不起作用 –

相關問題