2012-09-05 56 views
8

我有一些時鐘腳本。一切都很好,它的工作完美,但...我有一個問題。如果在時鐘設置爲一位數小時或分鐘,如1:5時鐘之前不添加「0」數字。這是我做了什麼,但它沒有奏效。你能幫助我嗎,很多thx?如果時鐘有一個數字,加上「0」

window.setInterval(function update_clock() { 
    var currentTime = new Date(); 
    var currentHours = currentTime.getHours(); 
    var currentMinutes = currentTime.getMinutes(); 
    $.ajax({ 
     success: function (clock) { 
      document.getElementById("hour").firstChild.nodeValue = currentHours; 
      document.getElementById("minutes").firstChild.nodeValue = currentMinutes; 
      if (currentMinutes.length == 1) { 
       currentMinutes = "0" + currentMinutes; 
      } 
     } 
    }); 
}, 999); 
+2

可能重複的[String.Format in Javascript?](http://stackoverflow.com/questions/6220693/string-format-in-javascript) –

+0

我找不到它... – Lukas

+0

「問題」這個代碼是'number.length'(例如'(42).length')*總是*'undefined'。 – 2012-09-05 09:35:21

回答

13

currentMinutes是一個數字,所以它沒有length屬性。另外,在將currentMinutes設置爲minutes元素之前,您必須先檢查length

喜歡的東西:

var currentHours = currentTime.getHours(); 
var currentMinutes = currentTime.getMinutes(); 

$.ajax({ 
    success: function (clock) { 
     if (currentMinutes.toString().length == 1) { 
      currentMinutes = "0" + currentMinutes; 
     } 

     document.getElementById("hour").firstChild.nodeValue = currentHours; 
     document.getElementById("minutes").firstChild.nodeValue = currentMinutes; 
    } 
}); 
+1

好吧,它的工作很好,很多thx的幫助,chears – Lukas

8

currentMinutes不會有length性質,因爲它是一個Number,而不是一個String。您可以強制它成爲String

if ((currentMinutes+'').length == 1) { 
    currentMinutes = "0" + currentMinutes; 
} 

,因爲你有一個Number,你應該讓你的病情......

if (currentMinutes < 10) { 
    currentMinutes = "0" + currentMinutes; 
} 

如果你是特別瘋狂,你可以做...

var hoursMinutes = ((new Date)+"").match(/\d+:\d+(?=:)/)[0].split(":"); 
+0

或者只是if(currentMinutes <10){' – xdazz

+1

@xdazz繼續閱讀:) – alex

+0

'if(currentMinutes <10){'not working :( – Lukas

1

你也可以查看sprintf()的JavaScript。

sprintf("%02d:%02d", currentHours, currentMinutes); 

使用接受的格式讓你有超過你的輸出更多的控制,當你需要的功能:

你就可以像這樣簡單的事情去了。

16

您可以使用.slice來提取字符串的一部分。將負數傳遞給它,以便從字符串的末尾切片。

因此,以下是可能的,而且很簡單:

('0'+currentMinutes).slice(-2) 

'0'串聯確保了操作的目標永遠是一個字符串。 ('0'+currentMinutes)將產生2或3個字母的字符串(例如「07」或「017」)。切斷該字符串的最後兩個字符會給你一個0填充的兩位數字。

請注意,如果currentMinutes100,則上述值將產生「00」,因此它假定您知道將要使用的值。

這可以提取到更多的東西可重用:

Number.prototype.zeroPad = function() { 
    return ('0'+this).slice(-2); 
}; 

這將使你寫:

currentMinutes.zeroPad(); 

你也可以將填充變量的長度:

Number.prototype.zeroPad = function(length) { 
    length = length || 2; // defaults to 2 if no parameter is passed 
    return (new Array(length).join('0')+this).slice(length*-1); 
}; 

可以稱爲:

currentMinutes.zeroPad(); // e.g. "07" or "17" 
currentMinutes.zeroPad(3); // e.g. "007" or "017" 

請注意,雖然currentMinutes.zeroPad()將工作,7.zeroPad()不會。

+0

+1這是非常簡潔,愛它 –

0
在android系統

(建立)

String time=String.format("%02d:%02d",hourOfDay,minute); 
在JavaScript中使用

(sprintf.js)

int i = 1; 
string s = sprintf("%02d", i); 
document.write(s); // Prints "01" 

sprintf.js: http://www.diveintojavascript.com/projects/javascript-sprintf

+0

OP需要的解決方案** JavaScript **,而不是Android –

0

基於其他awnsers,我創建這行代碼:

var now = new Date(); 
 
var dd = now.getDate(); 
 
var mm = now.getMonth()+1; 
 
var y = now.getFullYear(); 
 
var h = now.getHours(); 
 
var m = now.getMinutes(); 
 

 
function aZero(n) { 
 
    return n.toString().length == 1 ? n = '0' + n: n; 
 
} 
 

 
document.getElementById("out").innerHTML = 
 
    aZero(dd) + "-" + 
 
      aZero(mm) + "-" + 
 
      y + " - " + 
 
      aZero(h) + ":" + 
 
      aZero(m);
<div id="out">my time :D</div>

Cu下一次。

相關問題