2

これを行うPHPスクリプトがあるとしましょう。

$timeNow = 1349852400000; // Unix time for Oct 10, 2012 00:00:00 PDT
echo "<script type='text/javascript'>";
echo     "setTimeout(function(){alert('time out!');}, $timeNow - Date.now());";
echo "</script>";

このスクリプトが日付/時刻が2013に設定されているデバイスに提供された場合はどうなりますか?日付/時刻が2010に設定されているデバイスにこれが提供された場合はどうなりますか?

サーバーの時計が設定されている日時は重要ですか?それは2013年のデバイスにどのように影響しますか?2010年に立ち往生したものはどうですか?

その値を選択したい場合は$timeNow、2012年10月10日の00:00:00にカリフォルニア州サンフランシスコで同期されたすべての場所でアラートがスローされます(つまり、太平洋時間に設定されたデバイスとに設定されたデバイス)セントラルタイムデバイスの場合は午前2:00:00になりますが、セントラルタイムは同時にアラートを表示する必要があります)、それを行うことはできますか?UTCとのタイムゾーンの違いを考慮して、Pacificデバイスに1つの値を提供し、Centralデバイスに別の値を提供する必要はありませんか?

申し訳ありませんが、タイムゾーンは私にとって本当に混乱しています。頭を包むのに苦労しています。

4

2 に答える 2

1

これに Unix 時間を使用する場合は、何も心配する必要はありません (以下の例外が 1 つあります)。タイムゾーンに関係なく、まったく同じ瞬間に世界中でアラートがポップアップするようにしたいようです。

Unix 時間 0 は

  • 1970 年 1 月 1 日午前 0 時、ズールー時間
  • 1969 年 12 月 31 日、午後 4 時、サンフランシスコ時間

したがって、時刻 0 にアラートが発生するように設定した場合、サンフランシスコとロンドンの人々は同時にアラートを見ることになります。任意の Unix 時間についても同様です。これは実際には、ある瞬間を表す単なる数字です。世界中どこでも同じ瞬間。したがって、次の日時文字列は両方とも

  • 1970-01-01T00:00:00Z
  • 1969-12-31T16:00:00-0800

Unix time 0 で示される、同じ瞬間の表現です。

同様に、タイムゾーンに関係なく、世界中の誰もがまったく同じ瞬間に 1349852400000 の時刻を見ています。したがって、コードは Unix 時間で記述された特定の瞬間に何かを警告しようとしているため、スクリプトが実行されているコンピューターが正しい時間に設定されていれば、コードは原則として機能するはずです。

たくさんのコンピューターに同時に何かを警告させたい場合 (ウイルスを書いているのですか? 冗談です)、デバイスの時計が不適切に設定されている可能性がある場合に対処したい場合は、それらを作ることができます。中央のタイム サーバーを呼び出し、それに基づいてタイムアウトを設定します。次に、おそらくクロスサイトの問題に対処する必要がありますが、原則として、すべてのマシンが中央のタイムサーバーと通信し、そこからのデータを受け入れることに同意する場合、これを行うことができます.

補遺

これがどのように機能するかです。スクリプトが多数のマシンで実行されているとします。彼らは皆、時計をすべて間違って設定しています。意図的に時計を間違えたのかもしれません。誤って時計を間違えたのかもしれません。しかし、それらすべてを同時に警告したいとします。

したがって、スクリプトが行うべきことは次のとおりです。サーバーへの (Ajax) 呼び出しを行います。これは、クロスサイトの問題を単純化するために、スクリプトが埋め込まれた HTML ページを配信したのと同じサーバーです。この呼び出しは、リアルタイムを知っているサーバーと通信します。これで、今からアラート時間までの時間もわかります。そのため、サーバーでこれら 2 つの値を引き、その番号のクライアントに配信します。その後、クライアントは

setTimeout(theAlertFunction, theValueReturnedFromTheAjaxCall)

そして、あなたは行ってもいいです。

于 2012-10-05T07:15:13.553 に答える
0

ユーザーのシステムが間違った日付に設定されている場合、それに対してできることは何もありません。このケースを無視すると、どのシステムでもサーバーのタイムスタンプの正しい時間を取得できます。

任意のタイム ゾーンで UTC からオフセットして、タイム スタンプ ビンゴに追加できます !!!

 var d = new Date(); 
    var yourCorrectDate = new Date(timeNow +(d.getTimezoneOffset() * 60000)); 
// timenow is the time your server has sent

分単位でオフセットを提供します

d.getTimezoneOffset() 
于 2012-10-05T07:10:12.850 に答える