Преобразовать строку во время

Я пытаюсь преобразовать строку во время,
у меня есть строка в этом формате,
«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

Решение

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

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

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

Другие решения

С регулярным выражением?

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

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

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

?>
0

По вопросам рекламы [email protected]