に設定することによって発生するバグ?ここでは、0 時間 1409068800 (2014/8/27 0:0:0) で 1409144737 (2014/8/27 21:5:37) を取得するなど、多くの利用可能な方法がありますが、ここでは一般的に使用される 3 つの方法を示します。
????1.mktime 関数メソッド?
??
- $time?=1409144737;??
- ???var_dump(date('Y-m-d?H:i:s',mktime(0,0,0 ,date('m',$time),date('d',$time),date('Y',$time ))));??
??????2.strttime 関数メソッド ?
????
- var_dump(date('Y-m-d?H:i:s',strtotime(date('Y-m-d?00:00:00',$time))));? ?
???
? 、実行は少し遅く、効率的ではないため、規則性による別の方法、つまり整数の除算の方法を見つけます。原則として、今日経過した秒数を整数の除算で計算します。ここは東第 8 地区であるため、計算プロセスには 8 時間かかります。これは、$time で表される実際の秒数よりも 8 時間長くなります。 ?
????3. 整数除算メソッド?
- var_dump(date('Y-m-d?H:i:s',$time?-?($time 8*60*60)%86400));??
を実行すると10W の通話の場合、上記の 3 つの方法はそれぞれ 14 秒、50 秒、および 30 秒かかります。3 番目の方法の効率は非常に優れています。 ?
しかし、しばらくオンラインにした後、テストでバグが報告されました。つまり、1975 年のタイムスタンプが選択された場合、誤った日付が表示されます。バグ?
????
- $time?=?321001200;//1980/3/4?15:0:0??
- ?? ???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?