将 JIRA 时间日志 #h #m #s 格式的持续时间转换为 00:00:00

ash*_*ish 2 php

我想将我的持续时间转换为1h 20m 53s格式01:20:53。我的持续时间可能只有20m 53s或25m或。我需要将其转换为 的时间格式。1h23s00:00:00

h2o*_*ooo 6

^(?:(?<hours>\d+)h\s*)?(?:(?<minutes>\d+)m\s*)?(?:(?<seconds>\d+)s\s*)?$您可以使用和的正则表达式sprintf来确保前面添加了零:

<?php

function translateTime($timeString) {
    if (preg_match('/^(?:(?<hours>\d+)h\s*)?(?:(?<minutes>\d+)m\s*)?(?:(?<seconds>\d+)s\s*)?$/', $timeString, $matches)) {
        return sprintf(
            '%02s:%02s:%02s',
            (!empty($matches['hours'])   ? $matches['hours']   : '00'),
            (!empty($matches['minutes']) ? $matches['minutes'] : '00'),
            (!empty($matches['seconds']) ? $matches['seconds'] : '00')
        );
    }

    return '00:00:00';
}

var_dump( translateTime('1h 20m 53s') ); //string(8) "01:20:53"
var_dump( translateTime('20m 53s') );    //string(8) "00:20:53"
var_dump( translateTime('53s') );        //string(8) "00:00:53"
var_dump( translateTime('1h 30s') );     //string(8) "01:00:30"
var_dump( translateTime('2h 3m') );      //string(8) "02:03:00"
Run Code Online (Sandbox Code Playgroud)

演示版

虽然看起来很吓人,但正则表达式只是一堆命名的捕获组:

正则表达式可视化

\s是空白字符(空格、制表符\r、、、、)是数字(、、、、、、、、、、、、、)\n\f
\d0123456789