2016-11-21 71 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分钟”它不起作用 –