私はいくつかの非常に基本的な時間の計算をしようとしています - 基本的に、時間と距離の入力を与え、速度を計算します。私は時間入力を秒に変換するためにstrtotime()を使用することを選択しました - しかし、私はいくつかの奇妙な結果を得ています。私はこれらの結果を得るのはなぜPHP時間計算の奇妙な振る舞い:strtotime()が負の数を返すのはなぜですか?
<?php
$t1 = strtotime("3:15:00",0);
$t2 = strtotime("1:00:00",0);
$t3 = strtotime("2:00:00",0);
$t4 = strtotime("9:00:00",0);
echo $t1 . "\n";
echo $t2 . "\n";
echo $t3 . "\n";
echo $t4 . "\n";
?>
:たとえば、このサンプル・プログラムを
を与えられましたか?
$ php test.php
-56700
-64800
-61200
-36000
更新:
誰が明示的にそれを言わなかったので、私は上記の機能のバグを説明しましょう。私はstrtotime()に0の時間を渡すと、1969年12月31日の深夜から派生したタイムスタンプを生成することになると思っていました。これは奇妙に思えますが、私の目的のために働くでしょう。
私が数えなかったことは、文字列を変換するときにstrtotime()がタイムゾーンを考慮に入れ、サーバーがUTCより5時間遅れていることです。その上、時間帯のシフトのために、PHPはの時代の前の日であるを解釈します。つまり、12月30th,1969,1919の代わりに発生したと解釈されます。負の数で...
ユージンは正しいと思われます。私が経過時間だけを計算したいのであれば、組み込みの時間関数は使用できません。私はこの実行したとき
「私はただの経過時間を計算したい場合は、私が使用することはできません組み込みの時間関数です。 - いいえ、できます。strtotime()の2番目のパラメータを省略してください。指定した時刻の今日のタイムスタンプを取得します。タイムゾーンは重要ではありません。 2番目のパラメータとして0を指定するだけで、大文字小文字の問題が発生します。 – deceze
それは意味をなさない。 もう一度 - 私は絶対的な時間を欲しくない、私は秒にユーザー入力文字列を変換する必要があります。あなたのソリューションがうまくいく唯一の方法は、strtotime( "user string"、time()) - strtotime( "midnight"、time())のようなことです。 –
だから? strtotime()で文字列を秒に変換していますが、1970年以降のすべての秒も追加されています。しかし、それらのタイムスタンプの間だけで相対的な計算をしているのであれば、それは問題ではありません。 0,900,1345または1246399668,1246400568,1246401013-両方とも同じ相対的関係である。 – deceze