2013-08-31 54 views
0

有類似下面如何在JavaScript函數內使用DateTime.UtcNow來顯示javascript時鐘?

 <script> 
     function startTime() { 
      var today = new Date(); 
     var h = today.getHours(); 
     var m = today.getMinutes(); 
     var s = today.getSeconds(); 
     // add a zero in front of numbers<10 
     m = checkTime(m); 
     s = checkTime(s); 
     document.getElementById('clockSpan').innerHTML = h + ":" + m + ":" + s; 
     t = setTimeout(function() { startTime() }, 500); 
    } 

    function checkTime(i) { 
     if (i < 10) { 
      i = "0" + i; 
     } 
     return i; 
    } 
</script> 

一個非常簡單的JavaScript時鐘,但它使用瀏覽器的時間設置。相反,我想使用服務器時間。

我該如何做這樣的事情?

 var today = new Date(<%=DateTime.UtcNow%>); 

它給錯誤這樣

enter image description here

asp.net 4.5

回答

2

您的代碼缺少字符串周圍的分隔符,但這取決於瀏覽器正在理解的服務器產生的日期格式。取而代之的是,計算的毫秒數,因爲1970-01-01,使用Date構造函數,作爲一個值:

var today = new Date(<%=(int)DateTime.UtcNow.Subtract(new DateTime(1970,1,1)).TotalMilliseconds%>); 

但是,你必須重寫代碼同時使用服務器日期和瀏覽器日期。您只能使用該代碼獲取頁面加載時間。每次運行該功能時,它都會顯示相同的時間,因此您必須將服務器時間變爲一次變量,並在頁面加載到瀏覽器後立即將瀏覽器時間變爲一次,並獲得差異。從這以後,您可以從瀏覽器時間計算服務器時間。

+0

如果他在意大利的小數點分隔符是'''',他會有什麼發生?將'TotalMilliseconds'(這是一個'double')是否正確傳遞? (我很確定沒有,但搜索'<%= %>'的文檔總是很困難......它可能使用'ToString()',對吧?) – xanatos

+0

@xanatos:這就是爲什麼值被轉換爲'int' 。 – Guffa

+0

我沒有注意到......至少現在提問者會知道演員的原因。現在你的代碼是完美的,至少在2038-01-19之前:-)(我會投到'long') – xanatos

1

由於您使用的JavaScript是不可能使用任何預先建立的方法服務器獲取數據,相反,如果你正在尋找一個特定的服務器的時間,你將需要使某種形式的AJAX(也許在標籤上的asp.net AJAX juding)調用一個PHP(或其他)腳本來返回給你的時間,你可以用來構造你的Date對象。

相關問題