• ベストアンサー

microtime関数は、結構イイカゲン?!

いつもお世話になっております。 環境/PHP5 <?php //開始時刻を記録 $start_time = microtime(); //ユーザ定義関数 user_function($arg); //終了時刻を記録 $end_time = microtime(); //時刻差を求め、ユーザ定義関数の処理にかかった時間を求めたい $dif_time = $end_time - $start_time; //求めた数値を出力 echo $dif_time; //関数の定義 function user_function($arg){ ~処理定義~ } ?> 上記スクリプトの出力結果が、 マイナスの値だったり、プラスの値だったりするのですが、 それはなぜなのでしょう? -0.238105 だったり、 0.708105 だったりします。 プラスの値で、数字が上下するならまだしも、 値がマイナスになる意味がわかりません。笑 軽くバックトゥザフューチャーしちゃってるのでしょうか。 ともかく、すごく、あてにならない感じなのです。 microtime関数は、結構イイカゲンな仕様なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

http://jp2.php.net/microtime 引数にtrueを追加して再チャレンジしてください。 ---引用---------------------------------- オプション引数を付けずにコールされた場合、この関数は文字列 "msec sec" を返します。ただし、sec は Unix エポック (1970 年 1 月 1 日 0:00:00 GMT) から計算した秒数、msec はマイクロ秒の部分です。 文字列のそれぞれの部分は秒単位で返されます。 ------------------------------------------ 尚、PHPマニュアルは、 http://jp2.php.net/{関数名} とURLを叩けば説明が出てきます。 ついでに下のほうに、ユーザの投稿もかなり参考になるので、 もし挙動がおかしいことがあったらまずは引数とか確認してみましょう。 私はstrposやarray_searchの引数順が覚えられなくてヘビーローテでこの二つを検索してます(笑)

march4
質問者

お礼

まったくお恥ずかしい。苦笑 自分に言いたいです。 「ちゃんと、PHPマニュアルを読もうよ」と。苦笑 ということで、読んできました。 方法としては、hogehoge78さんが書かれていた「true」を使う方法と $array = explode(" ",microtime()); $start_time = $array[0] + $array[1]; とする方法とがあるみたいですね。 結果はどちらも同じようですが、trueの方が楽ちんですね。 >​http://jp2.php.net/​{関数名} !! 良いことを知りました。笑 >strposやarray_searchの引数順が覚えられなくてヘビーローテ あ~、私は最近、 sqlite_query()の引数には順番がない事を知り、愕然としました。笑 引数を前後逆にしても、問題なく動くのでした。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4901/10362)
回答No.2

microtime()の返す値を誤解しているからでは? "マイクロ秒 秒" のマイクロ秒部分同士だけ引くと、プラスだったりマイナスだったりして当然です。秒部分も引かないと。

march4
質問者

お礼

はい~、よく分かりました^^ >マイクロ秒部分同士だけ引くと、プラスだったりマイナスだったりして当然 符号が逆になる意味も、よく分かりました。 それを踏まえ、再挑戦してみた所、数字がマイナスになることはなくなりましたが、 平均して、0.896732091904くらいだった数字が、 突然、上がることがあるんですよね…。 5.746732091904 くらいに。爆 排水口に毛でも詰まっているのでしょうかね。

関連するQ&A