使用服务器和系统时间在网页上计时?

Sha*_*awn 11 javascript vb.net ajax clock clock-synchronization

我需要在网页上添加一个时钟.时钟需要与服务器同步,但我真的不想让它经常检查服务器,因为页面将在几台PC上全天候打开.有没有办法从服务器获取时间,然后使用系统时钟保持更新并每隔15分钟左右检查服务器以保持同步?

Jon*_*ton 16

我以前的方式是:

  • 从服务器上花时间,
  • 从客户那里抽出时间(立即)
  • 获得抵消.
  • 显示时钟时,将偏移量应用于客户端上的当前时间.

您只需要从服务器偶尔更新它.

你需要解决的问题是,在提出从服务器获取时间的请求时,在获得客户端时间之前会有一段滞后.您可以通过使用ajax请求来获取服务器时间而不是其他任何内容来最小化这一点,从而减少开销和网络延迟等.


Ski*_*ick 12

+Date.now()从Unix纪元开始返回本地ms.所以:

  • 从服务器获取时间
  • 计算服务器时间和本地时间之间的差异
  • 通过获取当地时间并使用差异进行调整,每秒或每分钟更新时钟(取决于您显示的内容)
  • 每隔15分钟更新一次差异.

或类似的东西.

这是展示上半场的小提琴:

var serverTime = 1310127993162; //this would come from the server obviously
var localTime = +Date.now();
var timeDiff = serverTime - localTime;

setInterval(function () {
    console.log(+Date.now() + timeDiff);
}, 1000); 
Run Code Online (Sandbox Code Playgroud)


Leo*_*ipe 5

Server Time: <input type="text" id="clock" value="" size='8'>

<script type="text/javascript">
var serverTime = <?php echo time() * 1000; ?>; //this would come from the server
var localTime = +Date.now();
var timeDiff = serverTime - localTime;

setInterval(function () {
    var realtime = +Date.now() + timeDiff;
    var date = new Date(realtime);
    // hours part from the timestamp
    var hours = date.getHours();
    // minutes part from the timestamp
    var minutes = date.getMinutes();
    // seconds part from the timestamp
    var seconds = date.getSeconds();

    // will display time in 10:30:23 format
    var formattedTime = hours + ':' + minutes + ':' + seconds;

    $('#clock').attr('value',formattedTime); <-- input id=clock
}, 1000);
</script>
Run Code Online (Sandbox Code Playgroud)