2009-07-13 7 views
1

私はmktime関数に少し問題があります。私の本番サーバー上で、私は実行すると、次のMKTime関数は間違った時刻を返しますか?

echo '<p>' . mktime(24, 0,0, 8,29,2009) . ' - 12pm</p>'; 
echo '<p>' . mktime(23, 0,0, 8,29,2009) . ' - 11pm</p>'; 
echo '<p>' . mktime(22, 0,0, 8,29,2009) . ' - 10pm</p>'; 

をそして(クイック変換にwww.unixtimestamp.comを使用して)読みやすい形式に戻って、それらのタイムスタンプを変換し、時間はすべてが1時間ずれています。私はもともと、これが2400 VS 0000の問題だと考えましたが、それは他の日付がオフになっていることを説明しません。

アイデア?

答えて

5

あなたのサーバーは、期待していた時間帯とは異なるタイムゾーンを持っています。 Unixのタイムスタンプは、1.1.1970 00:00:00 GMTから秒単位で測定されるため、コードに非公開のタイムゾーン変換があります。あなたはどちらか

+0

デフォルトのタイムゾーンを設定しましたが、これは設定されていません。私が銃を飛ばしたようなさらなる調査のように、タイムスタンプは順方向と逆方向に変換します。それは表示上の問題のようです。しかし、助けてくれてありがとう。 –

0

私はちょうどコマンドラインから以下を実行し、次の(予想される)出力を得ました。あなたがそれらを実行するとどうなりますか?

$ php -r "echo date('H:i:s Y-m-d', mktime(24, 0, 0, 8, 29, 2009));" 
00:00:00 2009-08-30 

$ php -r "echo date('H:i:s Y-m-d', mktime(23, 0, 0, 8, 29, 2009));" 
23:00:00 2009-08-29 

$ php -r "echo date('H:i:s Y-m-d', mktime(22, 0, 0, 8, 29, 2009));" 
22:00:00 2009-08-29 
0

私の問題は、先行ゼロとそのmktime I入力での日と月でした。関数が誤った結果を返すよりも。一つのオプションは次のように機能して先行ゼロを取り除くことであろう

$str = ltrim($str, '0'); 

出典:How to remove all leading zeroes in a string

または

$var = (int)$var; 

出典:PHP remove first zeros

私はsoulmergeから一つの可能​​性を使用:

$date = new DateTime($year . '-' . $month . '-' . $day . ' ' . $hour . ':' . $minute . ':' . $seconds); 
$match_time = $date->getTimestamp(); 

ただし、タイムゾーンは常にdate_default_timezone_set()またはDateTimeで設定する必要があります。

+0

OPの犯人ではありませんが、ピットが落ちる可能性があることに注意する価値があります。 – johnsnails

関連する問題