2013-02-23 17 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"歸還。
      • 否則,請將其設爲空字符串,因爲要注意顯示。