首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将时间持续时间(如JIRA时间日志#h #m #s格式)转换为00:00:00

将时间持续时间(如JIRA时间日志#h #m #s格式)转换为00:00:00
EN

Stack Overflow用户
提问于 2014-04-08 10:52:47
回答 2查看 1.4K关注 0票数 2

我想将我的时间期限从1h 20m 53s转换成01:20:53格式。我的时间期限可能只有20m 53s25m1h23s。我需要把它转换成00:00:00的时间格式。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-08 11:06:53

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

代码语言:javascript
复制
<?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"

DEMO

虽然看起来很可怕,但regex只是一群命名的捕获组:

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

\d是一个数字(0123456789)

票数 5
EN

Stack Overflow用户

发布于 2014-04-08 11:07:48

首先,使字符串与php DateTime对象兼容。

代码语言:javascript
复制
$time = preg_split( "/(h|m|s)/i", " 1H 20m 53s " , null, PREG_SPLIT_DELIM_CAPTURE);

$h = 0;
$m = 0;
$s = 0;

$count = count($time);

if ($count == 7)
{
    ${strtolower($time[1])} = $time[0];
    ${strtolower($time[3])} = $time[2];
    ${strtolower($time[5])} = $time[4];
}
else if ($count == 5)
{
    ${strtolower($time[1])} = $time[0];
    ${strtolower($time[3])} = $time[2];
}
else if ($count == 3)
{
    ${strtolower($time[1])} = $time[0];
}

$date = new \DateTime();
$date->setTime($h, $m, $s);
echo $date->format('H:i:s');

您现在可以以php DateTime支持的任何格式发布它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22934814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档