2011-05-24 27 views
1

我有一個選擇的次前導零,但我想保持領先的零:如何保持一個時間表

var fastTrainReading = [0943, 0957, 1006, 1013 , 1027, 1036, 1043, 1057, 1106, 1113, 1127, 1136, 1213, 1227, 1236, 1243, 1257, 1306, 1313, 1327, 1336, 1343, 1357, 1406, 1413, 1427, 1436, 1443, 1457, 1506, 1513, 1527, 1537, 1543, 1559, 1606, 1613, 1627, 1636, 1643, 1657, 1704, 1718, 1728, 1735, 1749, 1758, 1816, 1830, 1847, 1859, 1906, 1911, 1930, 1936, 1941, 1959, 2006, 2017, 2027]; 

這是進行數學:

var currentTime = hour*100 + mins; 
if ((day == 0) || (day == 6)) { 
    document.write ("There are no buses today"); 
} else { 

var displayCount = 0; 
     var TrainStr1 = ""; 
     for (var i=0, len=fastTrainReading.length; i<len; ++i) { 
      if ((fastTrainReading[i] > currentTime) && (displayCount < 2)) { 
       displayCount = displayCount+1; 
       TrainStr1=TrainStr1 + fastTrainReading[i] + "<br/>"; 
      } 
     } 
    } 
document.write (TrainStr1) 

我有一個很好的搜索,如果我錯過了一些可以隨意濫用我(但指出我在正確的方向)。

+0

部隊變量類型的字符串:'TrainStr =「」 + 0975;' – Mikaveli 2011-05-24 10:30:35

+1

實際上,我認爲前導零表示原始數字是八進制,但0943是不是有效的八進制。數組應該存儲普通整數('943')或字符串('''0943'')。 – 2011-05-24 10:35:47

+0

好點詹姆斯。我只是把它們看作是字符串,因爲它是領先的0. 0943和0957是他的集合中唯一破碎的。儘管如此,我還是會針對他的具體問題規範字符串。 – 2011-05-24 10:43:06

回答

2

最簡單的解決方案是將您的時間數據存儲爲字符串,例如var fastTrainReading = ['0943', ...。在計算例程中,JavaScript將轉換爲整數。

對於堅持傳統原則的綜合字符串格式化的解決方案,嘗試的sprintf()JavaScript的:http://www.diveintojavascript.com/projects/javascript-sprintf

+0

感謝James的解決方案。 – 2011-05-24 13:02:38

1

你可以嘗試使用.toString()
,如:
TrainStr1=TrainStr1 +fastTrainReading[i].toString()+ "<br/>";
ALT到您的時間保存爲字符串。

+0

這不起作用。 fastTrainReading默認存儲爲字符串數組 – 2011-05-24 10:39:33

+0

不正確。看看結果是什麼,當你嘗試:'alert(typeof(fastTrainReading [0]));' – 2011-05-24 10:52:41

+0

@Lucky Murari:這沒有任何意義。 – 2011-05-24 10:55:50

0

您需要填充您的號碼。

Number.prototype.zf = function _zeroFormat(digits) 
{ 
    var n = this.toString(), pLen = digits - n.length; 
    for (var i = 0; i < pLen; i++) 
    { 
     n = '0' + n; 
    } 
    return n; 
} 

if ((fastTrainReading[i] > currentTime.zf(4)) && (displayCount < 2)) { 
    displayCount = displayCount+1; 
    TrainStr1=TrainStr1 + fastTrainReading[i] + "<br/>"; 
} 

一旦你歸您所有的數字是填充0到4位的字符串比較是可能的。否則,你會遇到問題。就目前而言,它看起來像你的代碼試圖比較一個字符串(如fastTrainReading中的一個元素)和一個數字(currentTime)。

1

默認情況下,您不會得到前導零。

正如你所知道的TrainStr1的長度是4,你可以使用下面的函數來獲得零。

function formatted(time) { 
    var s = "0000" + time; 
    return s.substr(s.length-4); } 

您可以使用document.write

0

只是聲明您的數組作爲字符串之前調用函數 '格式化':

var fastTrainReading = ['0943', '0957', '1006', '1013']; 

不要擔心fastTrainReading[i] > currentTime仍然有效。 '100' > 99 == true