【问题标题】:Converting negative milliseconds into human readable format in PHP在 PHP 中将负毫秒转换为人类可读的格式
【发布时间】:2012-12-02 10:03:51
【问题描述】:

好的,所以我有这个功能:

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;
}

它将毫秒转换为 h:m,它适用于正数。 示例:

echo convertTime(60000);       // outputs: 0 h 1 m
echo convertTime(60000*70);    // outputs: 1 h 10 m
echo convertTime(60000*60*48); // outputs: 48 h 0 m

(我不希望它转换为天,所以它显示了实际的小时数) 不幸的是,它不适用于负数...

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

关于如何弥补这一点的任何想法?

【问题讨论】:

  • 您希望得到什么结果? 1h 1m 还是 22h 59m?
  • 回声转换时间(-60000); // 应该输出:0 h -1 m
  • echo "-".convertTime(60000); 怎么样:P
  • @jurgemaister 这不适用于更高的$ms - 结果可能类似于-12 h 54 m...
  • @Alice 你的算法有一个错误:应该像$day = floor($hr / 24);一样计算天数,因为一天有24小时......

标签: php time converter notation negative-number


【解决方案1】:

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

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)
{
    $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);
}

【讨论】:

  • 我认为说-0 h -1 m0 h -1 m 是愚蠢的。当然可以修改代码以匹配发布的输出。
  • 感谢您试用 Salman,但不幸的是,这对我不起作用。回声转换时间(-60000);输出 -0d 00h 01m 00.0000s
  • 使用第一个例子,忽略第二个。
  • 你对那个减号是对的,它看起来确实很愚蠢。我们怎样才能让它总是出现在字符串的开头而不是分钟的前面? echo convertTime(-59*60*1000); // Should output - 0 h 59 m echo convertTime(-61*60*1000); // Should output - 1 h 1 m
猜你喜欢
  • 2010-09-15
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 2022-11-28
  • 1970-01-01
相关资源
最近更新 更多