2016-11-21 7 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

thats magic , большое спасибо. –

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 минут», он не работает –