2013-08-31 53 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对象。

相关问题