PHPで日付と時間を扱う場合、タイムゾーン管理は多くの場合、開発者にとって重要な問題です。さまざまな地域の要件に応じて日付と時間を正しく表示できるようにアプリケーションを有効にするために、PHPはタイムゾーン設定を有効にするためのいくつかのツールを提供します。その中で、 DateTime :: SettimeZoneとTimeZone_open関数は、開発者がタイムゾーンを柔軟に設定できるようにする2つの一般的に使用されるツールです。この記事では、これら2つの機能を組み合わせて、複数回のゾーン環境での時間変換を処理する方法を詳細に紹介します。
DateTime :: SettimeZoneは、 DateTimeオブジェクトのタイムゾーンを変更するDateTimeクラスの方法です。 DateTimeオブジェクトを作成したら、この方法を使用して、タイムゾーンを指定されたタイムゾーンオブジェクトに変更します。一般的な使用法のシナリオには、ユーザーの入力時間を指定されたタイムゾーンに変換するか、UTC時間を現地時間に変換することが含まれます。
TimeZone_Openは、指定されたタイムゾーンを表すDatetimeZoneオブジェクトを開いて返すために使用されるPHPの関数です。このタイムゾーンオブジェクトは、DateTime :: SettimeZoneに渡すことができ、DateTimeオブジェクトのタイムゾーンを設定できます。
<span><span><span class="hljs-variable">$timezone</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span></span>
上記のコードは、上海タイムゾーンを表すDateTimeZoneオブジェクトを返します。
マルチタイムゾーン環境では、 timezone_openを使用してdatetimezoneオブジェクトを作成し、 datetime :: setimezoneを介してdatetimeオブジェクトに適用できます。これにより、柔軟なタイムゾーン変換を実現できます。
UTC時間を「アジア/上海」タイムゾーン時間に変換する必要があるとします。特定のコードは次のとおりです。
<span><span><span class="hljs-comment">// aを作成します UTC タイムゾーン DateTime 物体</span></span><span>
</span><span><span class="hljs-variable">$utcDateTime</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-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-string">'UTC'</span></span><span>));
</span><span><span class="hljs-comment">// 印刷 UTC 時間</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'UTC 時間: '</span></span><span> . </span><span><span class="hljs-variable">$utcDateTime</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-string">"\n"</span></span><span>;
</span><span><span class="hljs-comment">// 使用 timezone_open 指定されたタイムゾーンを開きます</span></span><span>
</span><span><span class="hljs-variable">$shanghaiTimeZone</span></span><span> = </span><span><span class="hljs-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span><span><span class="hljs-comment">// 意思 UTC 時間に変換します上海タイムゾーン時間</span></span><span>
</span><span><span class="hljs-variable">$utcDateTime</span></span><span>-></span><span><span class="hljs-title function_ invoke__">setTimezone</span></span><span>(</span><span><span class="hljs-variable">$shanghaiTimeZone</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-string">'上海時間: '</span></span><span> . </span><span><span class="hljs-variable">$utcDateTime</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-string">"\n"</span></span><span>;
</span></span>
出力結果:
<span><span><span class="hljs-string">UTC</span></span><span> </span><span><span class="hljs-string">時間:</span></span><span> </span><span><span class="hljs-number">2025-06-29 10:00:00</span></span><span>
</span><span><span class="hljs-string">上海時間:</span></span><span> </span><span><span class="hljs-number">2025-06-29 18:00:00</span></span><span>
</span></span>
ユーザーは、システムのタイムゾーンまたは他のタイムゾーンに変換する必要がある特定のタイムゾーンの時間を提供する場合があります。次の例は、ユーザー入力「2025-06-29 15:00:00」をUTC時間に変換する方法を示しています。
<span><span><span class="hljs-comment">// 用户输入的時間和タイムゾーン(假设用户提供的是纽约時間)</span></span><span>
</span><span><span class="hljs-variable">$userTime</span></span><span> = </span><span><span class="hljs-string">'2025-06-29 15:00:00'</span></span><span>;
</span><span><span class="hljs-variable">$userTimeZone</span></span><span> = </span><span><span class="hljs-string">'America/New_York'</span></span><span>;
</span><span><span class="hljs-comment">// 作成する DateTime 物体,ユーザーのタイムゾーンを設定します</span></span><span>
</span><span><span class="hljs-variable">$userDateTime</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-variable">$userTime</span></span><span>, </span><span><span class="hljs-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-variable">$userTimeZone</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-string">'用户時間 (ニューヨークタイムゾーン): '</span></span><span> . </span><span><span class="hljs-variable">$userDateTime</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-string">"\n"</span></span><span>;
</span><span><span class="hljs-comment">// に変換します UTC タイムゾーン</span></span><span>
</span><span><span class="hljs-variable">$userDateTime</span></span><span>-></span><span><span class="hljs-title function_ invoke__">setTimezone</span></span><span>(</span><span><span class="hljs-title function_ invoke__">timezone_open</span></span><span>(</span><span><span class="hljs-string">'UTC'</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-string">'に変換します UTC 時間: '</span></span><span> . </span><span><span class="hljs-variable">$userDateTime</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-string">"\n"</span></span><span>;
</span></span>
出力結果:
<span><span><span class="hljs-string">用户時間</span></span><span> </span><span><span class="hljs-string">(ニューヨークタイムゾーン):</span></span><span> </span><span><span class="hljs-number">2025-06-29 15:00:00</span></span><span>
</span><span><span class="hljs-string">に変換します</span></span><span> </span><span><span class="hljs-string">UTC</span></span><span> </span><span><span class="hljs-string">時間:</span></span><span> </span><span><span class="hljs-number">2025-06-29 19:00:00</span></span><span>
</span></span>
DateTime :: SettimeZoneを使用する場合、ターゲットタイムゾーンが元のタイムゾーンと同じ場合、PHPは元のオブジェクトに直接戻り、新しいDateTimeオブジェクトを再現しません。
TimeZone_openは、地域/都市形式(アジア/上海など)、オフセット形式( +02:00など)などの複数のタイムゾーン形式をサポートしています。
タイムゾーン変換は、夏時間(DST)を考慮します。これは、選択したタイムゾーンのルールに従って自動的に調整されます。
DateTime :: SettimeZoneとTimeZone_open関数を使用すると、非常に柔軟で強力なタイムゾーン変換を実現できます。タイムゾーンを合理的に選択することにより、ユーザーが世界中を訪れるときにタイムゾーンに一致する正確な時間を常に確認できるようにします。 PHPの両方の関数は、システム時間をユーザー時間に変換するか、あるタイムゾーンの時間を別のタイムゾーンに変換するかどうかにかかわらず、強力なサポートを提供します。