文本时间到数字

时间:2010-08-01 16:16:28

标签: php text time

我有多行时间

"42 sec"
"1 min"
"2 h 32 min"

是否可以将其转换为

"00:00:42"
"00:01:00"
"02:32:00"
用PHP填写?

4 个答案:

答案 0 :(得分:7)

PHP的strtotime()是一个有用的函数,可以将时间的字符串表示转换为unix时间戳。然后,我们可以将时间转换为我们喜欢的任何格式。

但是,您的原始时间字符串不是strtotime()可以直接处理的格式。例如。 'h'必须是'小时'。但是如果您的数据一致,我们可能会在传递给strtotime()之前替换它们。

注意我们尝试将原始时间相对于0转换,而不是当前时间。

$rawTimes = array ('42 sec', '1 min', '2 h 32min');
foreach ($rawTimes as $rawTime) {
  // Convert into a format that strtotime() can understand
  $rawTime = str_replace('h','hour',$rawTime);
  echo '"'.$rawTime.'" = "'.gmdate('H:i:s',strtotime($rawTime,0)).'"'."\n";
}

将输出:

"42 sec" = "00:00:42"
"1 min" = "00:01:00"
"2 hour 32min" = "02:32:00"

请注意strtotime()了解'秒','秒','分钟','分钟'和'小时'。并且似乎处理空间或没有空间,例如。处理“32分钟”或“32分钟”。

答案 1 :(得分:1)

不是最干净的解决方案,但它适用于您的三种情况:

<?
    $time[] = "42 sec";
    $time[] = "1 min";
    $time[] = "2 h 32min";

    $seconds = '/([\d]{1,})\s?sec/';
    $minutes = '/([\d]{1,})\s?min/';
    $hours = '/([\d]{1,})\s?h/';

    foreach( $time as $t )
    {
        echo '<br />';
        preg_match( $hours, $t, $h );
        $hour = $h[1];
        if( $hour )
        {
            if( strlen( $hour )<2 )
                $hour = '0' . $hour;
        }
        else
            $hour = '00';


        preg_match( $minutes, $t, $m );
        $min = $m[1];
        if( $min )
        {
            if( strlen( $min )<2 )
                $min = '0' . $min;
        }
        else
            $min = '00';

        preg_match( $seconds, $t, $s );
        $sec = $s[1];
        if( $sec )
        {
            if( strlen( $sec )<2 )
                $sec = '0' . $sec;
        }
        else
            $sec = '00';

        echo $hour . ':' . $min . ':' . $sec;

    }
?>

输出:

00:00:42
00:01:00
02:32:00

答案 2 :(得分:0)

我很确定有一个更好的解决方案,但是那个有效。

function timetotime($str) {
    $match = null;
    if (preg_match("/(\d+)(\s?)h/", $str, &$match)) {
        $h = $match[1];
        if ($h < 10)
            $result = "0{$h}:";
        else
            $result = "{$h}:";
    } else 
        $result = "00:";

    if (preg_match("/(\d+)(\s?)min/", $str, &$match)) {
        $h = $match[1];
        if ($h < 10)
            $result .= "0{$h}:";
        else
            $result .= "{$h}:";
    } else
        $result .= "00:";

    if (preg_match("/(\d+)(\s?)sec/", $str, &$match)) {
        $h = $match[1];
        if ($h < 10)
            $result .= "0{$h}";
        else
            $result .= "{$h}";
    } else
        $result .= "00";

    return $result;
}

答案 3 :(得分:-1)

http://php.net/manual/en/function.strtotime.php

<?php
$dates = array("42 sec", "1 min", "2 hour 32 min"); // normalise last item

foreach($dates as $d)
    printf("%5s - %s\n", $d, nSecs($d));

function nSecs($date)
{
    $t = strtotime("+1 day $date");
    return $t - strtotime("+1 day");
}
?>

如果你可以将h => hour标准化,那就没那么糟了。