Php sprintf什么都不做-尝试输出为两位数(前导零)

Php sprintf什么都不做-尝试输出为两位数(前导零),php,printf,Php,Printf,我有一个秒到时间的函数,我希望总是以两位数输出分和秒的值。换句话说,5将变成05。我在函数中使用了sprintf,但它没有做任何事情。值仍以单个数字返回 //convert seconds to time function convertSeconds($seconds) { // extract hours $hours = floor($seconds / (60 * 60)); // extract minutes $divisor_for_minutes

我有一个秒到时间的函数,我希望总是以两位数输出分和秒的值。换句话说,
5
将变成
05
。我在函数中使用了
sprintf
,但它没有做任何事情。值仍以单个数字返回

//convert seconds to time
function convertSeconds($seconds)
{
    // extract hours
    $hours = floor($seconds / (60 * 60));

    // extract minutes
    $divisor_for_minutes = $seconds % (60 * 60);
    $minutes = floor($divisor_for_minutes / 60);

    // extract the remaining seconds
    $divisor_for_seconds = $divisor_for_minutes % 60;
    $seconds = ceil($divisor_for_seconds);

    // return the final array
    $obj = array(
        "h" => (int) $hours,
        "m" => (int) sprintf("%02d", $minutes),
        "s" => (int) sprintf("%02d", $seconds)
    );
    return $obj;
}

如果将强制转换删除为整数,则
sprintf
函数将正确格式化数字:

$obj = array(
    "h" => (int) $hours,
    "m" => sprintf("%02d", $minutes),
    "s" => sprintf("%02d", $seconds)
);

在十进制表示法中,整数不能以零开头(只有整数的十六进制、八进制和二进制表示法可以以零开头)

这是您正在转换的
sprint()
不是变量的问题,所以请尝试

$obj = array(
        "h" => (int)$hours,
        "m" => sprintf("%02d", (int)$minutes),
        "s" => sprintf("%02d", (int)$seconds)
    );
如果您想要以2位格式输出,则必须删除
(int)
类型转换