在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米