2016-11-21 3 views
0

Ich versuche Zeichenfolge zu Zeit zu konvertieren, die Zeichenfolge Ich habe in diesem Format ist, "1 Stunde", "1 Stunde", "2 Stunden 30 Minuten", "3 Stunde 45 Minuten"Convert String Time

Ich möchte sie in H: i: s-Format konvertieren. so scheint es wie 3:45:00

zur Zeit benutze ich str_pos, um Zeichen vor hr zu bekommen und sie zu strippen und sie zu verbinden, um h: i: s format zu bilden.

$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; 

ähnlich Minuten ....

besser und einfacher Weg, dies zu tun? Kann ich DateTime-Methoden trotzdem verwenden?

+0

https://eval.in/681782. ist das was du willst? –

+0

Nicht schön, aber sollte funktionieren: '$ string = '3 hour 45 minutes'; $ dateTime = DateTime :: createFromFormat ('h \ h \ o \ ur \ \ \ \ \ \ \ \ \ \', $ string); var_dump ($ dateTime-> Format ('H: i: s')); ' – swidmann

+0

Abhishek Salian Überprüfen Sie die Kommentare und Antworten und lassen Sie uns wissen –

Antwort

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

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

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

das ist Magie , Danke vielmals. –

0

Mit Regex?

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

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

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

?> 
+0

Wenn String-Format ändern wird dann habe ich Angst, dass es nicht funktioniert –

+0

ja funktioniert mit sagen "1 Std. 10 Min." aber wenn ich "1 Std." oder "10 Min." –