【问题标题】:Client Side clock using server side system time使用服务器端系统时间的客户端时钟
【发布时间】:2013-01-17 18:23:21
【问题描述】:

我在 .Net 环境中工作,在我的 aspx 页面上,我想添加一个正在运行的带秒数的数字时钟,但我需要它来使用服务器端时间。最好的方法是什么?

谢谢!

【问题讨论】:

  • 你能假设服务器上的时间与客户端上的时间同步吗? (即,它们没有以相对论速度移动)
  • 你获胜的准确度如何?为了真正准确,您需要实现一些协议,该协议不仅可以计算获取时间,还可以计算获取该时间的延迟。

标签: javascript asp.net .net


【解决方案1】:

通过moment 来查看这个 javascript 库。

您只需要为您的 javascript 代码提供服务器端时间,可能通过数据属性之类的方式

即:

<html data-server-time="@Model.ServerTime">

然后你的 JS 应该只是(假设 jQuery 和 moment):

var date = $('html').data('server-time');
var start = new Date();

var updateTime = function (){
    setTimeout(function(){
        var now = moment(date).add(new Date() - start).format('YYYY/MM/DD HH:mm:ss')
        $('.target').text(now);
        updateTime();
    },1000);
}

$(function(){
    updateTime();
});

Fiddle

这样您将使用服务器时间,但您无需在每次页面加载时多次请求它,从而避免不必要的 AJAX 调用。除非你的服务器有核级时钟或类似的东西。

【讨论】:

  • 这假定服务器上的时间以相同的速率传递。 :)
  • 好吧,除非他需要极度精确,或者服务器在超空间中进行时间旅行,否则应该这样做。
【解决方案2】:

您考虑过 AJAX 更新面板吗?

MSDN:Tutorial: How to refresh an UpdatePanel control at a timed interval

每秒更新一次可能有点过头了。也许实现它,以便它轮询服务器以检查服务器并且客户端时间仍然同步,如果没有,更新客户端页面?

【讨论】:

  • 也许 UpdatePanel 看起来是一个简单的解决方案,但请不要这样做!做一些 ajax 调用和一个小的 javascript 就可以了。
猜你喜欢
  • 2015-02-27
  • 1970-01-01
  • 2013-07-17
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多