現在の位置: ホーム> 最新記事一覧> date_default_timezone_get()とstrtotime()が一緒に使用されたときにタイムゾーンの問題を解決する方法は?

date_default_timezone_get()とstrtotime()が一緒に使用されたときにタイムゾーンの問題を解決する方法は?

gitbox 2025-09-04
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// この記事のサンプルプログラムは、方法を示すためにのみ使用されます PHP 処理 date_default_timezone_get() そして strtotime() タイムゾーンを一緒に使用する場合の問題。</span></span><span>
</span><span><span class="hljs-comment">// 由于前面的注释部分そして正文内容无关,したがって、水平線を使用して分離します。</span></span><span>

</span><span><span class="hljs-comment">// ------------------------------------------------------------</span></span><span>

<span class="hljs-comment">/**
 * それを解決する方法 date_default_timezone_get() そして strtotime() タイムゾーンの問題を使用する場合の問題?
 * 
 * 存在する PHP 真ん中,`date_default_timezone_get()` 現在のスクリプト実行環境でデフォルトのタイムゾーンを取得するために使用されます,
 * そして `strtotime()` 则会存在する解析日期字符串时使用这个默认时区进行计算。
 * デフォルトのタイムゾーンが適切に設定されていない場合,日付と時刻の分析に逸脱を引き起こします。
 * 
 * **FAQの例**
 * 
 * ```php
 * echo date_default_timezone_get(); // 可能な出力 UTC
 * echo strtotime("2025-08-13 12:00:00"); // 結果はに基づいています UTC
 * ```
 * 
 * 这存在する开发そして部署环境不一致时尤为常见,たとえば、デフォルトのタイムゾーンはです `Asia/Shanghai`,
 * しかし、生産サーバーはそうかもしれません `UTC`,从そして导致解析结果相差数小时。
 * 
 * **解決**
 * 
 * 1. **デフォルトのタイムゾーンを明示的に設定します**
 * 
 * 存在する脚本开始位置使用 `date_default_timezone_set()`,動作環境が何であれ、,時間分析は常に一貫しています。
 * 
 * ```php
 * date_default_timezone_set('Asia/Shanghai');
 * $timestamp = strtotime("2025-08-13 12:00:00");
 * echo date("Y-m-d H:i:s", $timestamp);
 * ```
 * 
 * 2. **存在する strtotime 真んタイムゾーンでタイム文字列を使用します**
 * 
 * デフォルトタイムゾーンをグローバルに変更したくない場合,可以存在する传给 `strtotime()` 的字符串真ん中指定时区:
 * 
 * ```php
 * $timestamp = strtotime("2025-08-13 12:00:00 +08:00");
 * echo date("Y-m-d H:i:s", $timestamp);
 * ```
 * 
 * このように、デフォルトのタイムゾーンがそうであっても `UTC`,また、北京時間として正しく解析されます。
 * 
 * 3. **組み合わせた DateTime オブジェクトの使用**
 * 
 * `DateTime` オブジェクトは、より柔軟なタイムゾーン制御を提供します,可以存在する实例化时直接传入目标时区:
 * 
 * ```php
 * $dt = new DateTime("2025-08-13 12:00:00", new DateTimeZone("Asia/Shanghai"));
 * echo $dt-&gt;getTimestamp();
 * ```
 * 
 * **要約します**
 * 
 * - `date_default_timezone_get()` 現在のデフォルトタイムゾーンを反映しています,必ずしも予想されるビジネスタイムゾーンに沿っているわけではありません。
 * - `strtotime()` 存在する解析字符串时完全依赖默认时区,文字列自体にタイムゾーン情報がない限り。
 * - ベストプラクティスはです:または、タイムゾーンをグローバルに設定します,要么存在する每次解析时显式传入时区,環境の違いにより、時間の逸脱を避けてください。
 */</span>
</span></span>