2014-10-27 91 views
0

基本上我想要一個實時鐘,每秒更新一次!我環顧四周,找不到有效的東西。這是我曾嘗試過的:每秒更新javascript時間

function doDate() 
{ 
    var str = ""; 

    var days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"); 
    var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); 

    var now = new Date(); 

    str += "Today is: " + days[now.getDay()] + ", " + now.getDate() + " " + months[now.getMonth()] + " " + now.getFullYear(); 
    var updateTime = function() { setTimeout("doDate()", 1000); } 

    document.getElementById("todaysDate").innerHTML = str; 
} 

這似乎並不奏效!我認爲我在這裏做了些什麼?

+0

此代碼沒有任何影響:'VAR錄入=函數(){setTimeout的( 「doDate()」,1000); }' – hindmost 2014-10-27 09:18:32

+0

我把這個添加爲註釋,導致它的代碼審查問題比答案的一部分更多:爲什麼不使用'Date'對象並將其解析爲希望顯示它,而不是創建一個每次計時器滴答時都會有一堆數組? – Jite 2014-10-27 09:24:13

回答

1

請修改您的代碼如下: -

function doDate() 
 
{ 
 
    var str = ""; 
 

 
    var days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"); 
 
    var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); 
 

 
    var now = new Date(); 
 

 
    str += "Today is: " + days[now.getDay()] + ", " + now.getDate() + " " + months[now.getMonth()] + " " + now.getFullYear() + " " + now.getHours() +":" + now.getMinutes() + ":" + now.getSeconds(); 
 
    document.getElementById("todaysDate").innerHTML = str; 
 
} 
 

 
setInterval(doDate, 1000);
<div id="todaysDate"></div>

+1

「試試這個」答案通常不會*有用*。說*你改變了什麼,更重要的是,爲什麼*。 – 2014-10-27 09:19:24

+0

完美答案!我忘了在我的問題中添加我的實際時鐘了!我很高興你明白我想要做什麼。 – James111 2014-10-27 09:27:04

0

你setTimeout調用不正確:

var updateTime = function() { setTimeout("doDate()", 1000); } 

而應是這樣的:

setTimeout(doDate, 1000); 

添加回調時,不應該調用該函數(在這種情況下,不應該將其添加爲字符串),請添加函數本身。
而你不需要包裹它的功能,只需立即調用setTimeout函數即可。

0

下面的代碼可以幫助你

function doDate() 
{ 
    var str = ""; 
    var now = new Date(); 
    str = now.toDateString() +' '+now.toLocaleTimeString() ; 
    document.getElementById("todaysDate").innerHTML = str; 
} 
setInterval(doDate, 1000); 
1

這行代碼沒有任何影響:

var updateTime = function() { setTimeout("doDate()", 1000); } 

你定義函數的變量updateTime這使推遲的doDate調用,但這個變量是未使用的碼。

取而代之的是,你必須立即撥打setTimeout沒有與函數進行包裝:

setTimeout(doDate, 1000);