10

私が使用するJavaScriptで、PHPで以下のようなミリ秒で現在のタイムスタンプを取得したいDate.now()

1436030635348

私は以下のようなものを試しました:

$time = str_replace(".","",microtime(true)); 

しかし、正しく動作しないことがあります。1桁または2桁少なく印刷されるように。

4

3 に答える 3

15

浮動小数点値であるため、表示される桁数が少なくなります。したがって、 が得られた場合1234.0005、その `.0005 は実際には 500 マイクロ秒を意味します。5 の後のゼロは、まだフォーマットされていない浮動小数点値であるため失われます。

この関数microtimeはシステム コールに基づいていますがgettimeofday()、これもマイクロ秒まで正確ではありません。通常、10 マイクロ秒の精度です。Linux - Is gettimeofday() はマイクロ秒の解像度であることが保証されていますも参照してください。

-編集-質問の仕様がマイクロ秒からミリ秒に変更されていることがわかります。

float 値を整数として取得するには、値を掛けることができます。float 値は秒を表します。ミリ秒を取得するには 1000 を掛け、マイクロ秒を取得するには 1,000,000 を掛けます。仕様では (現在) ミリ秒と表示されているため、1000 を掛ける必要があります。10k を指定すると、1/10ms = 100μs の精度が得られます。ミリ秒は 1000 分の 1 秒です。マイクロ秒は 100 万分の 1 秒です。

簡単に言うと、時間を整数ミリ秒で取得するには、次のようにします。

$milliseconds = intval(microtime(true) * 1000);

注: デフォルトで時間を文字列または float として取得するのには理由があります。その理由は、32 ビット システムでは、PHP の整数も 32 ビットであり、ミリ秒やマイクロ秒を含むタイムスタンプを含めるのに十分な大きさではないためです。したがって、このソリューションは 64 ビット システムでのみうまく機能します。

于 2015-07-04T17:34:00.700 に答える
1
$timeStampData = microtime();
list($msec, $sec) = explode(' ', $timeStampData);
$msec = round($msec * 1000);

$result = $sec . $msec;

このようなもの

ただし、js date.now() は MICROseconds ではなく MILLIseconds で時間を返すことに注意してください。

于 2015-07-04T17:44:53.667 に答える