3

マイクロ秒単位で日時を取得する方法があるかどうか疑問に思っています。

microtime() を楽しみにしていましたが、現在の日付を返すだけです。

これが可能かどうかは誰にもわかりますか?

私は私の日付を次のように与えています:Y-m-d H:i:s.u.

みたいなことを考えていた(Y-1970)*31556926 + m*151200+d*86400+h*3600+m*60+s.u

しかし、それが私がプログラミングの初心者である理由かどうかはわかりませんが、それぞれを分離する方法で考えることができません。

ヘルプ/提案をいただければ幸いです。

4

3 に答える 3

5

あなたはこれを行うことができますDateTime

$date = DateTime::createFromFormat('Y-m-d H:i:s.u', '2000-01-01 13:12:12.129817');
echo $date->format('U.u');
//prints: 946728732.129817
于 2013-10-07T21:26:18.550 に答える
1

私がすることは、次のように入力形式を単純に分割することです。

Y-m-d H:i:su

.入力フォーマットされた日付文字列を爆発させることで、これを行うことができるはずです。次に、2 番目の部分全体で UNIX タイムスタンプを計算します。最後に、小数秒の部分をタイムスタンプに追加して戻します (結果として文字列が必要か浮動小数点数が必要かによって、算術演算の文字列連結を使用します)。

于 2013-10-07T21:27:50.447 に答える
0

いいえ、できません。タイムスタンプは内部的に整数で、1970 年 1 月 1 日 GMT からの秒数を表します。32 ビットまたは 64 ビットのシステムを使用しているかどうかに関係なく、1970 年からのマイクロ秒はオーバーフローにつながります。


質問を更新しました。はい、次を使用して現在の時刻をマイクロセンドで表示できますmicrotime()

$microtime = microtime();
// will return something like:
// 0.40823900 1381181037
// where the first are the micros and the last a regular time stamp
list($micros, $timestamp) = explode(' ', $microtime);

echo date('Y-m-d H:i:s', intval($timestamp)) . '+' 
  . (floatval($micros) * 1000000) . 'msec';
于 2013-10-07T21:16:32.333 に答える