格式持续时间字符串为h m d

时间:2017-07-23 13:15:06

标签: javascript reactjs momentjs

我想写一个函数,它以hh:mm(26:40)的格式作为参数字符串。

我需要函数作为输出返回字符串" 1 d,2 h,40 min"

我试图在没有运气的情况下搜索内置函数或最佳实践。

我已经提出以下代码并且它正在运作,但我觉得它有点矫枉过正,我想知道是否有最佳实践。



var t = "27:20"
var res = foo(t)
document.writeln(res);

function foo(st) {
  var splittedSt = st.split(":")
  var days = parseInt(splittedSt[0] / 24, 10) + " d";
  var hours = Number(splittedSt[0]) - Number(days.split(" ")[0]) * 24 + " h";
  var minutes = splittedSt[1] + " min";
  return days + " " + hours + " " + minutes
}




4 个答案:

答案 0 :(得分:0)

你想要这个

吗?



<?php 
class abc
{
    public static $data="i am static membervaribale".'</br>';

    public $data1="i am not a static membervaribale".'</br>';
    public   function a()
    {
        echo "I am a non static method".'</br>';
    }

    public  function getsize()
    {
        return self::$data;
    }
}

echo abc::$data;

//echo abc::$data1;//showing error;

echo abc::a();

echo abc::getsize();

$obj=new abc;
echo $obj->data1;


?>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你的方法是正确的。通常,您尝试解决的任务可分为两个步骤。

  1. 计算输入中的总数og基本单位(此处为minuts)
  2. 将此数字转换为所需格式。
  3. 以下代码将输入拆分为年,日,小时和分钟:

    &#13;
    &#13;
    document.writeln("27:20 -> " + foo("27:20:0"));
    document.writeln("8760:0 -> " + foo("8760:0"));
    document.writeln("-8760:0 -> " + foo("-8760:0"));
    
    function foo(st) {
      var splittedSt = st.split(":")
      // STEP 1
      var total = parseInt(splittedSt[0]) * 60 + parseInt(splittedSt[1]);
     
      // STEP 2
      var minutes = parseInt(total % 60);
      var hours = parseInt(total / 60) % 24;    
      var days = parseInt(total / 60 / 24) % 365;
      var years = parseInt(total / 60 / 24 / 365) ; 
      
      return years + " years " + days + " days " + hours + " hours " + minutes + " minutes"
    }
    &#13;
    &#13;
    &#13;

    虽然这对于相对简单的问题看起来像是一堆代码,但实际上没有其他办法可以做到。但是,大多数编程语言都有内置函数来处理许多简单的问题。不幸的是,我在Javascript方面的经验非常有限。因此,我无法实现这一目标,但@mplungjan可能会对此有所了解?

答案 2 :(得分:0)

 foo=s=>(((h,m)=>(Math.floor(h/24)+"d "+(h%24)+"h "+m+"m") )(...s.split(":")) );

那我认为很短暂

http://jsbin.com/xujupimefi/edit?console

答案 3 :(得分:0)

我能够使用momentjs lib来完成它,就像mplungjan在他的评论中所建议的那样(已经在项目中使用过了一段时间)。

一条带有相关格式的简单行。

CustomException extends IllegalArgumentException

会给出结果:

console.log(moment.duration("27:20").format("d [d], h [h], m [min]"));