Javascript时钟与设备不同

时间:2012-04-28 05:41:16

标签: javascript sync clock

我正在学习一些Javascript,而且我做了一个实时时钟(实际上我修改了W3school的代码但不管怎样......我已经想出如何用PHP制作一个时钟,所以没有意义重复...... )

实时时钟似乎与不同设备不同步,我想知道原因。

W3schools将日期对象解释为自1970年以来毫秒数的计数,所以我不明白为什么会出错......它在我看来并不是那样做,它只是反映计算机的时钟是什么

当我在智能手机上拉网站时,时钟约为30秒左右。

是否有某种方法可以让时钟反映服务器时间而不是每个用户的计算机?

这是代码

var ampm = "AM"; //Default
var message="";
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);
h=checkTime2(h);
document.getElementById('clocktxt').innerHTML=h+":"+m+":"+s+ " " +ampm + " " + message;
t=setTimeout('startTime()',500);
}

function checkTime(i)
{
if (i<10)
  {
  i="0" + i;
message = "How long you gonna sit there?";
  }
return i;
}

function checkTime2(i)
{
if (i>12)
  {
  i=i-12;
ampm="PM";
  }
return i;
}

window.onload=startTime;

4 个答案:

答案 0 :(得分:1)

您的代码在“客户端”设备上执行 - 您的智能手机,PC无论如何。 所以你有时间设置在这个设备上。这个'Date'对象实际上对服务器上的时间一无所知。时间由客户端计算机上安装的基础操作系统确定。

您的问题与某些特定技术(例如Java Script)无关,而是如何在服务器和客户端计算机上实现时间同步。 实际上它非常复杂。

您可以更进一步,询问如何在属于不同时区的设备之间同步时间。应该考虑“夏令时”的不同计算怎么样?

作为计算机之间时间同步的常见答案,您可以阅读有关网络时间协议的NTP

答案 1 :(得分:1)

如果您启用了PHP,则可以执行以下操作:

var serverTimeString = '<?php print date("F d, Y H:i:s", time())?>';
var today = new Date(serverTimeString);

答案 2 :(得分:0)

好吧,这就是我的做法:(一点都不变化)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Clock</title>
</head>
<body>

<div id="MyClockDisplay" class="clock" onload="showTime()">
     </div>
     <script>
     function showTime(){
    var date = new Date();
    var h = date.getHours(); // 0 - 23
    var m = date.getMinutes(); // 0 - 59
    var s = date.getSeconds(); // 0 - 59
    var session = "PM";

    if(h == 02){
        h = 12;
    }


    if(h > 12){
        session = "PM";
    }

    h = (h < 10) ? "0" + h : h;
    m = (m < 10) ? "0" + m : m;
    s = (s < 10) ? "0" + s : s;

    var time = h + ":" + m + ":" + s + " " + session;
    document.getElementById("MyClockDisplay").innerText = time;
    document.getElementById("MyClockDisplay").textContent = time;

    setTimeout(showTime, 1000);
    }
showTime();
</script>
<style>
     body {
    background: url('imagename.jpg');
    color: white;
}

.clock {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translateX(-50%) translateY(-50%);
    color: #e6967e;
    font-size: 60px;
    font-family: 'Josefin Sans', sans-serif;
    letter-spacing: 7px;
    -webkit-transition: 0.5s;



}
.clock:hover {
     transform: translateY(-10px);
     transition: 0.5s;
     font-size: 80px;
     color: whitesmoke;
}

</style>
</body>
</html>

虽然各国之间会有所不同,但会自动设置

答案 3 :(得分:-1)

以下代码将为您提供1970年以来的秒数。[Unix时间戳/大纪元时间]

Math.round( new Date().getTime() / 1000 )