2013-02-23 49 views
0

我想能返回字符串这样的功能:JavaScript函数写出来秒字符串格式这样

它需要一个输入,这是一个,表示时间值在

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

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

如果输入是60120180等,只返回分钟数用“M”结尾,而不秒:"1m"/"2m"/"3m"(如果不是必要不显示秒)。

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

如果输入是36007200等,然后返回轮小时仅与一个“H”末:"1h"/"2h"(相同的逻辑与分钟)。

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

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

+0

@ jfriend00这本来是一个Q&A后,这就是为什么我不包括。 – SeinopSys 2013-02-23 17:38:33

+0

这个网站并不是一个“请为我写代码”的网站,尽管有些人会这么做。这意味着我尝试了这里,而这里就是我卡住的地方。 – jfriend00 2013-02-23 17:41:20

+0

@ jfriend00要点是,我做了这个小功能,并认为我可以'分享我的知识 - 问答风格'。 – SeinopSys 2013-02-23 17:46:30

回答

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. 计算秒数而不必担心t的最简单方法他分师并没有什么,只是返回的60师和num
    3. 默认情况下的部分,我们不关心小时,所以我们只让false
  2. 数着时间
    1. 如果num大于或等于3600,那么是时候考虑使用小时了。所以让我们将会议纪要除以60,然后再将会议记录下来。
      • 但是,如果我们使用小时,我们必须以不同的方式处理分钟。我们从分钟中减去乘以60的小时数。如果需要,添加前导零。此外,如果结果编号为0,我们不希望显示它,所以我们使它成为false
    2. 如果数字小于3600,那么为什么还要打扰几个小时呢?继续。
  3. 解析输出
    1. 如果小时和分钟都undefined0,其值设置为一个空字符串,否则使用它们的值与"h""m"分别
    2. 解析秒
      • 如果所附分钟为0,小时为false0,秒也为零(发生这种情况的输入为0),返回"0s"
      • 如果秒不undefined0,并且十少,加上前导零和与"s"附加
      • 归还否则,如果在秒数十更大,只是附加了"s"归还。
      • 否则,请将其设为空字符串,因为要注意显示。