1

私は現在 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

4 に答える 4

1

コードは「クライアント」デバイス (スマートフォン、PC など) で実行されます。これで、このデバイスに時刻が設定されました。この「日付」オブジェクトは、実際にはサーバー上の時間について何も知りません。時間は、クライアント マシンにインストールされている基盤となるオペレーティング システムによって決まります。

あなたの質問は、実際には特定のテクノロジ (たとえば Java Script など) に関連するものではなく、サーバーとクライアント マシンで時刻を同期させる方法です。実際にはかなり複雑です。

さらに一歩進んで、異なるタイムゾーンに属するデバイス間で時刻を同期する方法を尋ねることができます。「夏時間」期間を考慮に入れる必要があるさまざまな計算はどうですか?

コンピューター間の時刻同期の一般的な答えとして、Network Time Protocol、 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 に答える