在PHP中将负毫秒转换为人类可读的格式

在PHP中将负毫秒转换为人类可读的格式,php,time,converter,notation,negative-number,Php,Time,Converter,Notation,Negative Number,好的,我有这个函数: function convertTime($ms){ $sec = floor($ms/1000); $ms = $ms % 1000; $min = floor($sec/60); $sec = $sec % 60; $t = $sec; $hr = floor($min/60); $min = $min % 60; $t = $min; $day = floor($hr/60); $

好的,我有这个函数:

function convertTime($ms){

    $sec = floor($ms/1000);
    $ms = $ms % 1000;

    $min = floor($sec/60);
    $sec = $sec % 60;
    $t = $sec;

    $hr = floor($min/60);
    $min = $min % 60;
    $t = $min;

    $day = floor($hr/60);
    $hr = $hr % 60;
    $t = $hr . " h " . $t . " m";

    return $t;
}
function convertTime($ms)
{
    $xx = $ms < 0 ? "-" : "+";
    $ms = abs($ms);
    $ss = floor($ms / 1000);
    $ms = $ms % 1000;
    $mm = floor($ss / 60);
    $ss = $ss % 60;
    $hh = floor($mm / 60);
    $mm = $mm % 60;
    $dd = floor($hh / 24);
    $hh = $hh % 24;
    return sprintf("%s%dd %02dh %02dm %02d.%04ds", $xx, $dd, $hh, $mm, $ss, $ms);
}
它将毫秒转换为h:m,并且可以很好地处理正数。 例如:

我不希望它转换成天,这样它就可以显示实际的小时数 不幸的是,它不能很好地处理负数

echo convertTime(-60000);    //outputs: -1 h -1 m (should be 0 h -1 m)

关于如何补偿这一点有什么想法吗?

这是您的原始函数,已格式化,删除了不必要的行,并添加了三行:

function convertTime($ms)
{
    $sign = $ms < 0 ? "-" : "";
    $ms = abs($ms);
    $sec = floor($ms / 1000);
    $ms = $ms % 1000;
    $min = floor($sec / 60);
    $sec = $sec % 60;
    $hr = floor($min / 60);
    $min = $min % 60;
    $day = floor($hr / 60);
    $hr = $hr % 60;
    return "$sign$hr h $min m";
}
echo convertTime(+60000);      //  0 h 1 m
echo convertTime(-60000);      // -0 h 1 m
echo convertTime(-60000 * 60); // -1 h 0 m
以下是我对同一函数的版本:

function convertTime($ms){

    $sec = floor($ms/1000);
    $ms = $ms % 1000;

    $min = floor($sec/60);
    $sec = $sec % 60;
    $t = $sec;

    $hr = floor($min/60);
    $min = $min % 60;
    $t = $min;

    $day = floor($hr/60);
    $hr = $hr % 60;
    $t = $hr . " h " . $t . " m";

    return $t;
}
function convertTime($ms)
{
    $xx = $ms < 0 ? "-" : "+";
    $ms = abs($ms);
    $ss = floor($ms / 1000);
    $ms = $ms % 1000;
    $mm = floor($ss / 60);
    $ss = $ss % 60;
    $hh = floor($mm / 60);
    $mm = $mm % 60;
    $dd = floor($hh / 24);
    $hh = $hh % 24;
    return sprintf("%s%dd %02dh %02dm %02d.%04ds", $xx, $dd, $hh, $mm, $ss, $ms);
}

结果你想要什么?1h 1m或22h 59m?回波转换时间-60000;//应输出:0 h-1 mhow关于echo-.convertTime60000;:P@jurgemaister这对更高的$ms不起作用-结果可能是-12h54m…@Alice您的算法中有一个错误:天数的计算方式应该是$day=floor$hr/24;因为一天有24小时……我认为说-0h-1m或0h-1m是愚蠢的。代码当然可以修改以匹配发布的输出。感谢您尝试Salman,但不幸的是这对我不起作用。回波转换时间-60000;输出-0d 00h 01m 00.0000s使用第一个示例,忽略第二个。关于减号tho,您是对的,它看起来确实很愚蠢。我们如何使它总是出现在字符串的开头,而不是一分钟前?回波转换时间-59*60*1000;//应输出-0小时59米回波转换时间-61*60*1000;//输出应为-1小时1米