5

シェルを使用してエポック時間を取得し、後で HTML ページで JavaScript を使用して別のエポック時間を取得し、それらの差を取得したいのですが、エポック時間が異なるスクリプト間で同期されていない可能性があるため、この差は役に立たないのではないかと心配しています。

ですから、シェルとJavaScriptを同時に使用してエポックタイムを取得した場合、結果が同じになるかどうかを知りたいですか? そうでない場合、違いはどのくらいですか?

ありがとう!

4

2 に答える 2

1

Unix エポック (1970-01-01T00:00:00Z) からの秒数を意味する場合、まさにこの定義によって管理されます。あなたが見ることができるはずの唯一の違いは、以下によって引き起こされます:

  • それを返すシステムコールの呼び出しの異なる時間*);
  • 異なるシステム上の非同期クロック。

そしておそらくまた:

  • 異なるプロセッサ コア/物理プロセッサの非同期クロック。
  • 現在の時刻を返す関数の実装依存の処理 (たとえば、JS エンジンの実装では、実際のシステムコールを実行する必要がないため、短時間だけ値をキャッシュする可能性がありますが、これには疑問があります)。

必要な時間分解能によっては、これらのいくつかは問題になりません。私の推測では、1 秒よりも細かい粒度が必要ない場合は、(同じマシン上で) 問題なく使用できるはずです。

*) また、シングルコアシステムでは、カーネルがそれをキャッシュしない限り、異なるシステムコールから (少なくとも ns の解像度では) 同じ時間を得ることができないことに注意してください。

于 2012-11-05T13:04:32.293 に答える
0

ECMA-262 セクション 15.9.1.1によると:

時間は、1970 年 1 月 1 日 UTC からのミリ秒単位で ECMAScript で測定されます。時間値ではうるう秒は無視されます。1 日あたり正確に 86,400,000 ミリ秒あると想定されます。

したがって、そうです、標準に準拠するすべての JavaScript 実装は、物理的なクロックの異常を自動的に処理して、まったく同じ値を返す必要があります。システムクロックの設定が間違っていなければ、どこでも同じ値になります。

他の言語やシステムでは「エポック」と「経過秒数」の定義が異なる可能性があることに注意してください (少なくとも他のほとんどのシステムでは、ミリ秒ではなく秒を使用し、ほとんどの場合うるう秒を考慮に入れます)。 1000 で割っても、別のプラットフォームまたは OS のタイムスタンプと一致します。

于 2012-11-05T13:14:06.633 に答える