人类可读持续时间的格式? JavaScript的

时间:2015-09-04 08:24:12

标签: javascript

我有function这个人类可读的持续时间。

function formatDuration (seconds) {
    function numberEnding (number) {
        return (number > 1) ? 's' : '';
    }
    if (seconds > 0){
        var years = Math.floor(seconds / 31536000);
        var days = Math.floor((seconds % 31536000) / 86400);
        var hours = Math.floor(((seconds % 31536000) % 86400) / 3600);
        var minutes = Math.floor((((seconds % 31536000) % 86400) %  60);
        var second = (((seconds % 31536000) % 86400) % 3600) % 0;         
        var r = (years > 0 ) ? years + " year" + numberEnding(years) : ""; 
        var x = (days > 0) ? days + " day" + numberEnding(days) : "";
        var y = (hours > 0) ? hours + " hour" + numberEnding(hours) : "";
        var z = (minutes > 0) ? minutes + " minute" numberEnding(minutes) : "";
        var u = (second > 0) ? second + " second" + numberEnding(second) : "";
        var str = r + x + y + z + u

        return str
    }
    else {
        return "now"}
    }
}

如何将rxyzu放在一起,如果有两个以上的最后一个总是由{分隔{ {1}}以及其他and。结果也是comma类型 例如:
"年","日","小时","分钟"和"第二"
"年","日","小时"和"分钟"
"一年"
"第二"
"分钟"和"第二"
它继续......

我尝试将它们放入string以便能够使用array,但它并不会为所有可能的组合返回所需的结果。 感谢

1 个答案:

答案 0 :(得分:4)

您使用数组进入了正确的轨道:

var a = [];
//...push things as you go...
var str = a.length == 1 ? a[0] : a.slice(0, a.length - 1).join(", ") + " and " + a[a.length - 1];

(我个人更喜欢牛津逗号["这个,那个和其他的#34;],但是你的例子并没有使用它,所以这就是你所要求的... 。)

直播示例



test(["this"]);
test(["this", "that"]);
test(["this", "that", "the other"]);

function test(a) {
  var str = a.length == 1 ? a[0] : a.slice(0, a.length - 1).join(", ") + " and " + a[a.length - 1];
  snippet.log("[" + a.join(", ") + "] => " + str);
}

<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
&#13;
&#13;