0

我想要一个可以返回这样的字符串的函数:

它接受一个输入,即数字字符串,以为单位表示时间值。

如果输入是0,则返回"0s"

如果输入是10(或小于 60),则只返回末尾带有“s”的数字:"10s"

如果输入的是60,120180,则只返回以“m”结尾的分钟数,不包括秒数:"1m"// "2m""3m"非必要时不显示秒数)。

如果输入是65,则返回"1m05s"(如果在第二个之前有数字或小时,则始终显示前导零)。

如果输入是36007200,则仅返回圆形小时,末尾带有“h”:"1h"/ "2h"(与分钟的逻辑相同)。

如果输入是3661,则返回"1h01m01s"(在分钟和秒上使用相同的逻辑:如果值之前有某些内容,则显示前导零)。

我只需要显示几个小时的值。

4

1 回答 1

1

这里是:

function toTimeString(num){
    if (typeof num != 'undefined'){
        if (!isNaN(num*1)){
            var mins=parseInt(num/60), secs=num % 60, hours=false,ret={};
            if (num>=3600){
                hours = parseInt(mins / 60);
                mins = mins-(hours*60);
                if (mins < 10 && mins != 0) mins = '0'+mins;
                else mins = false;
            }

            ret.h = (hours?hours+'h':'');
            ret.m = (mins?mins+'m':'');
            if (mins == 0 && !hours && secs == 0) ret.s = '0s';
            else if (secs){
                if (secs < 10 && mins) ret.s = '0'+secs+'s';
                else ret.s = secs+'s';
            }
            else ret.s = '';

            return ret.h+ret.m+ret.s;
        }
        else throw new TypeError("Passed argument is not a number");
    }
    else throw new ReferenceError("No arguments were passed.");
}

一点合乎逻辑的解释:

  1. 计算值
    1. 分钟等于num除以 60 并向下取整
    2. 计算秒数的最简单方法,而不必担心分钟除法等等,只需返回除法的余数 60 和num
    3. 默认情况下,我们不关心时间,所以让我们做吧false
  2. 数小时
    1. 如果num大于或等于 3600,那么是时候考虑使用小时数了。因此,让我们将分钟数除以 60,然后将其四舍五入。
      • 但如果我们使用小时,我们必须以不同的方式处理分钟。让我们从分钟中减去小时乘以 60。如果需要,添加前导零。另外,如果结果数字是0,我们不想显示它,所以我们制作它false
    2. 如果这个数字小于 3600,那为什么还要麻烦时间呢?继续。
  3. 解析输出
    1. 如果小时和分钟是undefinedor 0,则将它们的值设置为空字符串,否则分别使用它们的值 with"h""m"appended
    2. 解析秒
      • 如果分钟是0,小时是falseor0并且秒也是零(这种情况下输入是0),返回"0s"
      • 如果秒数不是undefined0小于十,则添加前导零并返回它们并"s"附加
      • 否则,如果秒数大于 10,则返回它们并"s"附加一个。
      • 否则,将其设为空字符串,因为需要显示。
于 2013-02-23T17:28:24.370 回答