ホームページ >バックエンド開発 >PHPチュートリアル >PHP環境のタイムゾーンをアジア/重慶に設定することによって発生するバグ

PHP環境のタイムゾーンをアジア/重慶に設定することによって発生するバグ

WBOY
WBOYオリジナル
2016-06-13 12:05:381303ブラウズ

PHP環境のタイムゾーンをアジア/重慶

に設定することによって発生するバグ?ここでは、0 時間 1409068800 (2014/8/27 0:0:0) で 1409144737 (2014/8/27 21:5:37) を取得するなど、多くの利用可能な方法がありますが、ここでは一般的に使用される 3 つの方法を示します。
????1.mktime 関数メソッド?
??

Java コード??
PHP環境のタイムゾーンをアジア/重慶に設定することによって発生するバグ
  1. $time?=1409144737;??
  2. ???var_dump(date('Y-m-d?H:i:s',mktime(0,0,0 ,date('m',$time),date('d',$time),date('Y',$time ))));??


??????2.strttime 関数メソッド ?
????

Java コード??
PHP環境のタイムゾーンをアジア/重慶に設定することによって発生するバグ
  1. var_dump(date('Y-m-d?H:i:s',strtotime(date('Y-m-d?00:00:00',$time))));? ?


???
? 、実行は少し遅く、効率的ではないため、規則性による別の方法、つまり整数の除算の方法を見つけます。原則として、今日経過した秒数を整数の除算で計算します。ここは東第 8 地区であるため、計算プロセスには 8 時間かかります。これは、$time で表される実際の秒数よりも 8 時間長くなります。 ?
????3. 整数除算メソッド?

Java コード? ?
PHP環境のタイムゾーンをアジア/重慶に設定することによって発生するバグ
  1. var_dump(date('Y-m-d?H:i:s',$time?-?($time 8*60*60)%86400));??



を実行すると10W の通話の場合、上記の 3 つの方法はそれぞれ 14 秒、50 秒、および 30 秒かかります。3 番目の方法の効率は非常に優れています。 ?

しかし、しばらくオンラインにした後、テストでバグが報告されました。つまり、1975 年のタイムスタンプが選択された場合、誤った日付が表示されます。バグ?

????

Java コード??PHP環境のタイムゾーンをアジア/重慶に設定することによって発生するバグ
  1. $time?=?321001200;//1980/3/4?15:0:0??
  2. ?? ???var_dump(date('Y-m-d?H:i:s',$time?-?($time 8*60* 60)%86400);??


? 1980-03 -03 23:00:00、他の 2 つの方法は両方とも正しい 1980-03-04 00:00:00?
その後、結果が正しいことが判明しました1980 年 5 月以降のみで、以前は 1 時間短かったです;?次に、PHP 設定の date.timezone = Asia/Chongqing を確認しましたが、PRC に変更すると、すべての期間が正しくなりました。この時点で、実際にはバグは解決されており、運用と保守が 600 台のマシンの構成をオンラインで変更するようになりました。しかし、なぜ 1980 年 5 月に何かが起こったのかと推測されます。 GMT 8?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。