我想要一个可以返回如下字符串的函数:
需要一个输入,即数字或字符串,表示秒中的时间值。
如果输入为0
,请返回"0s"
。
如果输入为10
(或低于60),请仅返回末尾带有“s”的数字:"10s"
。
如果输入为60
,120
,180
等,则只返回末尾带有“m”的分钟数,而不是秒:"1m"
/ "2m"
/ "3m"
(如果没有必要,不显示秒数。)
如果输入为65
,则返回"1m05s"
(如果在第二个之前有一个数字或小时,则始终显示前导零)。
如果输入为3600
,7200
等,则返回小时,结尾只有“h”:"1h"
/ "2h"
(逻辑与分钟)。
如果输入为3661
,则返回"1h01m01s"
(在分钟和秒上使用相同的逻辑:如果值之前有某些内容,则显示前导零)。
我只需要显示值直到数小时。
答案 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.");
}
一点逻辑解释:
num
除以60并向下舍入num
false
num
大于或等于3600,那么现在是考虑使用小时数的时候了。因此,让我们将分钟数除以60,然后将其缩小。
0
,我们不希望显示它,因此我们将其设为false
。undefined
或0
,请将其值设置为空字符串,否则分别使用"h"
和"m"
附加值0
,则小时为false
或0
且秒数也为零(输入为0
时会发生这种情况),返回{{ 1}} "0s"
或undefined
并且小于10,请添加前导零并返回附加0
"s"
即可返回。