PHP使用/不使用冒号将时间转换为十进制

时间:2016-04-20 16:54:35

标签: php

我正在尝试为工作创建一个付费计算器,他们使用十进制时间向我们付款。即 8.5单位而非8:30

由于有多少人将使用这个,我试图考虑结肠和非结肠使用,以及3和4位数(我们在24小时工作,所以一些人们将使用230而不是02:30。

我到目前为止的代码是:

function timeValidation($time) {
    $time = strpos($time, ':');

    if( $time == true ) {
        $time = explode(':', $time);
        $time = $time[0].$time[1];
    }

    if( strlen($time) <= 3 ) {
        $time = '0'.$time;
    }

    return $time;
}

echo $start = timeValidation($start);

当我在函数之外单独运行它时,它按预期工作,但是一旦它在函数中,我就没有得到我期望的输出。我不确定这是因为我的函数错误还是函数内部的逻辑。

我搜索过可能对我有帮助的问题,但我似乎找不到任何东西。我很高兴有人指出类似的问题,如果有的话。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

我可能会误解这个问题,但看起来你自己已经过度复杂了。

function standardiseTimeFormat($time) {
    $time = str_replace(':', '', $time);
    if (strlen($time) <= 3) {
        $time = '0' . $time;
    }

    return $time;
}

所以,如果我通过:

$time_one = '18:30';
$time_two = '3:30';
$time_three = '1830';
$time_four = '330';

我得到以下结果:

  

1830
  0330
  1830
  0330

编辑:稍微清理一下:

function standardiseTimeFormat($time) {
    $time = str_replace(':', '', $time);
    return str_pad($time, 4, 0, STR_PAD_LEFT);
}

只是为了 funsies ,如果你想要一个班轮..

function standardiseTimeFormat($time) {
    return str_pad(str_replace(':', '', $time), 4, 0, STR_PAD_LEFT);
}

答案 1 :(得分:2)

当您尝试确定它是否有冒号时,您正在覆盖函数内的$time变量。试试这个:

$start = '18:30';

function timeValidation($time) {
    $isTime = strpos($time, ':');
    if( $isTime == true ) {
        $time = explode(':', $time);
        $time = $time[0].$time[1];
    }
    if( strlen($time) <= 3 ) {
        $time = '0'.$time;
    }

    return $time;
}
echo $start = timeValidation($start);

输出:

  

1830