1

我目前正在学习一些 Javascript,并且我已经制作了一个实时时钟(实际上我修改了 W3school 的代码,但无论如何......我已经想出了如何用 PHP 制作一个时钟,所以重复那个没有意义......)

Butttt 实时时钟似乎没有与不同的设备同步,我想知道为什么。

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

4 回答 4

1

您的代码在“客户端”设备上执行 - 您的智能手机、PC 等等。因此,您在此设备上设置了时间。这个“日期”对象实际上对服务器上的时间一无所知。时间由安装在客户端机器上的底层操作系统决定。

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

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

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

于 2012-04-28T05:46:28.110 回答
1

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

var serverTimeString = '<?php print date("F d, Y H:i:s", time())?>';
var today = new Date(serverTimeString);
于 2012-04-28T06:08:16.657 回答
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>

它虽然会因国家/地区而异,但会自动设置

于 2020-05-07T08:51:29.560 回答
-1

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

Math.round( new Date().getTime() / 1000 ) 
于 2012-04-28T05:59:46.153 回答