使用PHP将字符串转换为秒数

3

我在PHP中有一个字符串'6m15s',我希望将其转换成时间或者理想情况下是秒数。我使用strtotime()函数,例如:

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

但是我得到的是'01:00:00'。是否有可能将我的字符串转换,如果可以的话,最好的方法是什么?


2
strtotime可以做很多事情,但它并非全知全能,不能转换所有与时间相关的内容。拆分您的字符串并改用mktime()6m本身就是含糊不清的。是指6个月还是6分钟? - Marc B
6m15s 不是传递给 strtotime() 的有效格式。 - John Conde
3个回答

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

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');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接