2016-06-23 7 views
2

У меня есть строка «6m15s» в PHP, которую я бы хотел преобразовать во времени или в идеале в секундах. Я использую функцию strtotime() как:Преобразование строки в секунды с помощью PHP

$time = date('H:i:s', strtotime('6m15s')); 
echo $time; 

Но я получаю '01: 00: 00' . Можно ли преобразовать мою строку, и если да, то какой был бы лучший способ сделать это?

+2

StrToTime может сделать много вещей, но это не всеведущ и не может преобразовать относящиеся ко времени ВСЁ. отделите свою строку и вместо этого используйте 'mktime()'. '6m' является неоднозначным в любом случае. 6 месяцев? 6 минут? –

+0

6m15s не является допустимым для перехода к strtotime() –

ответ

3

Вы можете использовать substr():

$string = '6m15s'; 
$minute = substr($string, 0, 1); 
$second = substr($string, 2, 2); 
echo date('H:i:s', strtotime("00:$minute:$second")); 
// outputs 00:06:15 
+0

Спасибо, человек, это полезно! – ShiggyDooDah

+0

И если это вместо '15m6s' ??? – AbraCadaver

+0

@ AbraCadaver, это не то, что он просил ... –

2

Если вы пытаетесь получить общее количество секунд, а затем что-то вроде:

preg_match('/((?<h>[\d]+)h)?((?<m>[\d]+)m)?((?<s>[\d]+)s?)/', $var, $m); 

echo ($m['h']* 60 + $m['m']) * 60 + $m['s']; // 375 

Это выглядит в течение нескольких часов, а также, как и в 1h6m15s.

0

Если вы работаете с шаблонами починки, то вы можете построить метод, как:

function stringToSecondByPattern($subject, $pattern = '/(\d+)m(\d+)s/') { 

    $matches = []; 
    preg_match($pattern, $subject, $matches); 

    list($original, $minuets, $seconds) = $matches; 

    $secondsSum = $seconds + ($minuets * 60); 

    return $secondsSum; 
} 

print stringToSecondByPattern('6m15s'); 
Смежные вопросы