STRFTIME関数は、日付と時刻のフォーマットに使用され、指定された形式に基づいて文字列を返します。基本的な構文は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">strftime</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$format</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$timestamp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">time</span></span><span>()) : </span><span><span class="hljs-keyword">string</span></span><span>
</span></span>
$フォーマットは日付と時刻の形式であり、 $タイムスタンプはフォーマットされるUNIXタイムスタンプです(デフォルトは現在の時刻です)。たとえば、 Strftimeを使用して現在の時間をフォーマットします。
<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strftime</span></span><span>(</span><span><span class="hljs-string">"%Y-%m-%d %H:%M:%S"</span></span><span>);
</span></span>
これにより、 2025-06-16 12:30:45と同様に、現在の日付と時刻が出力されます。
タイムゾーンは、日付のフォーマットにSTRFTIMEを使用する場合に重要な要素です。デフォルトでは、サーバーの現在のタイムゾーンに基づいて、 STRFTIMEプロセスの日付と時刻。ただし、プログラムを誤ったタイムゾーンで実行すると、タイムゾーン変換エラーが発生し、予想されるものと矛盾するディスプレイ時間が発生する可能性があります。
Strftimeは、サーバーのデフォルトタイムゾーン設定に従います。これは、サーバーのタイムゾーン構成が正しくない場合、 STRFTIMEを使用した時間出力が間違ったタイムゾーンに基づいてフォーマットされることを意味します。 date_default_timezone_get()から現在のタイムゾーンを表示できます。
<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>
タイムゾーンが正しくない場合、 date_default_timezone_set()を使用して、正しいタイムゾーンを設定できます。
<span><span><span class="hljs-title function_ invoke__">date_default_timezone_set</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span></span>
このようにして、 Strftimeが呼び出されると、返された時間は設定されたタイムゾーンに基づいてフォーマットされます。
Strftimeは時間をフォーマットすることができますが、タイムゾーン変換自体はサポートしません。異なるタイムゾーン間で時間を変換する必要がある場合、最良の方法は、 DateTimeクラスを使用し、最初にDateTimeオブジェクトを作成し、タイムゾーンを調整し、最後にSTRFTIMEを使用してフォーマットされた時間を出力することです。
<span><span><span class="hljs-variable">$datetime</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">'UTC'</span></span><span>));
</span><span><span class="hljs-variable">$datetime</span></span><span>-></span><span><span class="hljs-title function_ invoke__">setTimezone</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-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strftime</span></span><span>(</span><span><span class="hljs-string">"%Y-%m-%d %H:%M:%S"</span></span><span>, </span><span><span class="hljs-variable">$datetime</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getTimestamp</span></span><span>());
</span></span>
この例では、最初にUTCタイムゾーンのDateTimeオブジェクトを作成し、次にSettimeZoneメソッドを使用して上海タイムゾーン(アジア/上海)に変換し、最後にSTRFTIMEを使用して時間をフォーマットします。
さまざまな地域では、夏時間(DST)に応じてタイムゾーンを調整する場合があり、これはStrftimeの出力に影響します。この場合、 DateTimeクラスを使用して、 STRFTIMEを使用して直接動作するよりも、タイムゾーンと夏時間の問題に対処する方が安全です。たとえば、米国とヨーロッパの一部の地域は、季節に基づいてタイムゾーンオフセットを切り替えます。 DateTimeZoneはこれらの夏時間の調整を自動的に処理しますが、 Strftimeはそれらを直接処理できません。
例えば:
<span><span><span class="hljs-variable">$datetime</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">'2025-06-16 12:00:00'</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">'Europe/London'</span></span><span>));
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strftime</span></span><span>(</span><span><span class="hljs-string">"%Y-%m-%d %H:%M:%S"</span></span><span>, </span><span><span class="hljs-variable">$datetime</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getTimestamp</span></span><span>());
</span></span>
ここでは、ヨーロッパ/ロンドンは、夏時間であるかどうかに応じてタイムゾーンオフセットを自動的に調整し、 Strftimeはサーバーのローカルタイムゾーンに従って時間をフォーマットします。
Strftimeを使用する場合、さまざまな形式シンボルでタイムゾーンのサポートに注意を払う必要があります。一般的な時間形式のシンボルは次のとおりです。
%y :年
%M :月
%D :日付
%H :時間(24時間システム)
%M :議事録
%S :秒
ただし、 STRFTIME自体は、タイムゾーン情報を直接フォーマットする機能を提供しません。タイムゾーン情報を表示する必要がある場合は、 DateTimeクラスのフォーマットメソッドを組み合わせるか、 date_default_timezone_get()を使用してタイムゾーンを出力することを検討する必要があります。
Strftimeは、1970年1月1日以来秒数を表す整数であるタイムスタンプをフォーマットすることに注意してください。しかし、タイムスタンプはタイムゾーンとは無関係ですが、タイムスタンプは現地時間に関連していると解釈する方法です。これを行うために、 Strftimeはサーバータイムゾーンに従って出力をフォーマットします。
したがって、異なるタイムゾーンで同じタイムスタンプを取得するには、タイムスタンプを生成するときに正しいタイムゾーンが指定されていることを確認する必要があります。
日付と時刻のフォーマットにSTRFTIME関数を使用する場合、タイムゾーン変換の取り扱いは無視できない問題です。開発者は次のポイントに注意を払う必要があります。
タイムゾーン設定:サーバーのタイムゾーンが正しく設定されていることを確認するか、コード内のタイムゾーンを明示的に設定します。
タイムゾーン変換: STRFTIME自体はタイムゾーン変換を処理できません。 DateTimeクラスを使用してタイムゾーン変換を処理し、 STRFTIMEを使用して時間をフォーマットすることをお勧めします。
夏時間の節約の問題:夏時間の節約時には、タイムゾーンのオフセットが変化する可能性があり、 DatetimeZoneは夏時間の節約時間を自動的に処理できます。
フォーマットシンボルの使用: STRFTIMEのフォーマットシンボルは、タイムゾーン情報の直接出力をサポートせず、 DateTimeクラスと組み合わせて考慮することができます。
これらの重要なポイントを理解することは、開発者がクロスタイムゾーンアプリケーションを扱う際に一般的な時間エラーを回避し、システムの信頼性と精度を向上させるのに役立ちます。