Javascript函数用这样的字符串格式写出秒

时间:2013-02-23 17:28:24

标签: javascript time

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

需要一个输入,即数字字符串,表示中的时间值。

如果输入为0,请返回"0s"

如果输入为10(或低于60),请仅返回末尾带有“s”的数字:"10s"

如果输入为60120180等,则只返回末尾带有“m”的分钟数,而不是秒:"1m" / "2m" / "3m"(如果没有必要,不显示秒数。)

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

如果输入为36007200等,则返回小时,结尾只有“h”:"1h" / "2h"(逻辑与分钟)。

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

我只需要显示值直到数小时。

1 个答案:

答案 0 :(得分: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. 如果小时和分钟为undefined0,请将其值设置为空字符串,否则分别使用"h""m"附加值
    2. 解析秒
      • 如果分钟为0,则小时为false0且秒数也为零(输入为0时会发生这种情况),返回{{ 1}}
      • 如果秒数不是"0s"undefined并且小于10,请添加前导零并返回附加0
      • 否则如果秒数大于10,则只需附加"s"即可返回。
      • 否则,将其设为空字符串,因为无法显示。