PHPのデフォルトのタイムゾーン設定は通常、UTCです。このタイムゾーンは、グローバルタイム標準化をサポートするように設定されていますが、多くのアプリケーション、特に特定の地域のユーザーをターゲットにしているアプリケーションでは、デフォルトのタイムゾーンとしてUTCを使用することは適切ではない場合があります。たとえば、中国でアプリケーションを開発し(UTC+8)、サーバーがUTCに設定されている場合、表示時間にエラーが発生します。
通常、PHPは日付()関数を出力時間に使用します。タイムゾーンが正しく設定されていない場合、表示される時間は予想通りになりません。
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span></span>タイムゾーンが正しく設定されていない場合、この出力が予想どおりではない場合があります。
INI_SET()は、PHPの非常に実用的な機能であり、PHP構成アイテムの動的な変更を可能にします。プログラムが実行されているときに、 ini_set()を使用してタイムゾーンを設定できるため、PHPは指定したタイムゾーンに応じて時間を出力します。
<span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'date.timezone'</span></span><span>, </span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span></span>date.timezoneは、タイムゾーンを定義するPHP構成ファイルの指令です。 INI_SET()を介してタイムゾーンを変更した後、PHPは現在のスクリプトの指定されたタイムゾーンに従って時間を表示します。
アジア/上海(中国の標準時間)
アメリカ/new_york (米国ニューヨークタイムゾーン)
ヨーロッパ/ロンドン(ロンドンタイム)
アジア/東京(東京時代)
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// タイムゾーンを上海に設定します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'date.timezone'</span></span><span>, </span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span><span><span class="hljs-comment">// 現在の出力時刻</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>上記のコードは、上海のタイムゾーンに従って現在の時間を表示します。
date_default_timezone_get()関数を使用して、現在のPHP構成タイムゾーンを表示できます。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">date_default_timezone_get</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>PHP構成がタイムゾーンを明示的に設定しない場合、デフォルトの返されたタイムゾーンは通常UTCです。
場合によっては、 ini_set()を使用してタイムゾーンを設定しても効果がないようです。これは、デフォルトのタイムゾーンがphp.iniに設定されており、一部の環境で上書きできないためです。タイムゾーンの設定が有効になることを確認するには、次の方法を試すことができます。
Timezoneがphp.iniに設定されていないことを確認してください。
PHPエラーログを確認して、関連する警告またはエラーメッセージがあるかどうかを確認します。
アプリケーションに複数のタイムゾーンを持つユーザーが関与する場合、 DateTimeクラスとDateTimeZoneクラスを使用して、異なるタイムゾーンで時間を処理することを検討できます。これは、単に日付()関数を使用するよりも柔軟です。
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// aを作成します DateTime 物体</span></span><span>
</span><span><span class="hljs-variable">$date</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTime</span></span><span>(</span><span><span class="hljs-string">'now'</span></span><span>, </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">DateTimeZone</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>));
</span><span><span class="hljs-comment">// 上海時間の輸出</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$date</span></span><span>-></span><span><span class="hljs-title function_ invoke__">format</span></span><span>(</span><span><span class="hljs-string">'Y-m-d H:i:s'</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>正しいタイムゾーンを設定することは、PHPプログラムが正確な時間を表示するようにするために不可欠です。 ini_set()関数を使用すると、実行時にタイムゾーンを簡単に設定できます。特に、クロスタイムゾーンユーザーに関しては、タイムゾーンを合理的に設定すると、時間エラーを回避し、ユーザーが表示される時間が常に正確であることを確認できます。
ini_set()を使用してタイムゾーンを設定する操作は非常に簡単ですが、タイムゾーンの設定が上書きされないようにするために、PHP構成の他の設定に注意を払う必要があります。アプリケーションに複数のタイムゾーンの処理が含まれる場合は、 DateTimeクラスを使用して時間をより柔軟に処理することを検討してください。