【PHP8.x】formatメソッドの使い方
formatメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
formatメソッドは、DateIntervalオブジェクトが表す期間を文字列としてフォーマットするメソッドです。このメソッドを使用することで、期間を年、月、日、時間、分、秒などの単位で表現した文字列を取得できます。
formatメソッドは、%記号で始まるフォーマット指定子を使用して、出力される文字列の形式を制御します。例えば、%yは年数を、%mは月数を、%dは日数を表します。複数のフォーマット指定子を組み合わせることで、複雑な期間の表現も可能です。
formatメソッドの引数には、フォーマット文字列を指定します。フォーマット文字列には、出力したい単位に対応するフォーマット指定子を含めます。例えば、%y年%mヶ月%d日というフォーマット文字列を指定すると、「X年Yヶ月Z日」のような形式で期間が出力されます。
formatメソッドは、DateIntervalオブジェクトが表す期間に基づいて、指定されたフォーマットに従って文字列を生成し、その文字列を返します。DateIntervalオブジェクトが負の期間を表す場合、結果の文字列には負の記号が含まれることがあります。
例えば、$interval = new DateInterval('P1Y2M3D');というDateIntervalオブジェクトがあり、$interval->format('%y年%mヶ月%d日');を実行すると、1年2ヶ月3日という文字列が返されます。システム開発において、期間をユーザーにわかりやすく表示したり、ログに出力したりする場合に、このformatメソッドは非常に役立ちます。DateIntervalオブジェクトが表す期間を、必要な形式で文字列に変換するために利用できます。
構文(syntax)
1DateInterval::format(string $format): string
引数(parameters)
string $format
- string $format: 日付や時刻のフォーマットを指定する文字列
戻り値(return)
string
指定されたフォーマット文字列に従って、日付と時刻の期間を文字列として返します。
サンプルコード
PHP DateInterval::format で日付間隔を整形する
1<?php 2 3/** 4 * DateInterval::format() メソッドの使用例を示します。 5 * このメソッドは、2つの日時間の間隔(差)を、指定されたフォーマットで文字列に整形します。 6 * システムエンジニアを目指す初心者の方にも、日付や時間の計算結果を 7 * 読みやすい形式で出力する方法を理解してもらうことを目的としています。 8 */ 9function demonstrateDateIntervalFormat(): void 10{ 11 // 比較する開始日時と終了日時を作成します。 12 // DateTimeオブジェクトは、日付と時間の情報を保持します。 13 $startDateTime = new DateTime('2023-01-01 10:00:00'); 14 $endDateTime = new DateTime('2024-03-15 15:30:45'); 15 16 echo "=== 日時の間隔フォーマット例 ===\n"; 17 echo "開始日時: " . $startDateTime->format('Y-m-d H:i:s') . "\n"; 18 echo "終了日時: " . $endDateTime->format('Y-m-d H:i:s') . "\n\n"; 19 20 // DateTime::diff() メソッドを使って、2つの日時間の差を計算し、 21 // DateInterval オブジェクトとして取得します。 22 $interval = $startDateTime->diff($endDateTime); 23 24 // DateInterval::format() メソッドは、書式指定子(例: %y, %m, %d)を使って 25 // 間隔の各要素(年、月、日など)を整形します。 26 // 書式指定子はパーセント記号 (%) でエスケープする必要があります。 27 28 // 1. 年、月、日、時間、分、秒をすべて表示するフォーマット 29 echo "1. 完全な間隔: " . $interval->format('%y 年 %m ヶ月 %d 日 %h 時間 %i 分 %s 秒') . "\n"; 30 31 // 2. 短縮形のフォーマット 32 echo "2. 短縮形の間隔: " . $interval->format('%yY %mM %dD %hH %iM %sS') . "\n"; 33 34 // 3. 間隔の総日数のみを表示するフォーマット 35 // '%a' は、間隔全体の日数を表します。 36 echo "3. 総日数: " . $interval->format('%a 日') . "\n"; 37 38 // 4. 間隔の符号(正または負)を表示するフォーマット 39 // '%R' は、間隔が正 (+) か負 (-) かを示します。 40 echo "4. 間隔の符号: " . $interval->format('%R') . "\n"; 41 42 // 5. 年、月、日のみを表示するフォーマット 43 echo "5. 年月日のみ: " . $interval->format('%y 年 %m ヶ月 %d 日') . "\n"; 44 45 // 6. 時間、分、秒のみを表示するフォーマット 46 echo "6. 時間分秒のみ: " . $interval->format('%h 時間 %i 分 %s 秒') . "\n"; 47 48 echo "\nこれらの例から、DateInterval::format() を使って\n"; 49 echo "日付/時間の間隔を柔軟に表示できることがわかります。\n"; 50} 51 52// 上記の関数を実行し、DateInterval::format() の動作を確認します。 53demonstrateDateIntervalFormat(); 54
DateInterval::format()は、PHPで二つの日付や時間の「間隔」を表すDateIntervalオブジェクトの内容を、指定した書式で文字列として整形するためのメソッドです。この機能は、主にDateTime::diff()メソッドによって計算された日時の差を、人間が読みやすい形に変換する際に利用されます。
引数$formatには、間隔の各要素(年、月、日、時間など)を表示するための書式指定子を含む文字列を渡します。例えば、%yは年、%mは月、%dは日、%hは時間、%iは分、%sは秒を表し、パーセント記号(%)で始まり識別されます。また、%aは間隔全体の総日数、%Rは間隔が正(+)か負(-)かを示すなど、便利な書式指定子も用意されています。このメソッドは、指定された書式に従って整形された文字列を戻り値として返します。
サンプルコードでは、まず二つのDateTimeオブジェクトの差分をDateIntervalオブジェクトとして取得しています。その後、このDateIntervalオブジェクトに対してformat()メソッドを使い、「%y 年 %m ヶ月 %d 日 %h 時間 %i 分 %s 秒」のような完全な形式や、「%a 日」のように総日数のみを表示する形式、さらには間隔の符号(%R)を表示する形式など、様々な書式指定子を用いて間隔情報を出力しています。これにより、日付や時間の計算結果を柔軟かつ明確に表現することが可能になります。システムエンジニアにとって、ログの記録やレポートの生成など、日時データを整形して表示する場面で非常に役立つ機能です。
DateInterval::format() メソッドは、日時の間隔を整形する際に % で始まる独自の書式指定子を使用します。これは日付自体を整形する DateTime::format() とは異なるため、混同しないように注意が必要です。特に %y(年)や %m(月)、%d(日)などが各要素の数値を表すのに対し、%a は間隔全体の総日数を返します。そのため、目的に合わせて適切な書式指定子を選ぶことが重要です。また、書式指定子は大文字・小文字を区別し、無効な指定子を使用すると期待する結果が得られない可能性がありますので、公式ドキュメントで利用可能な書式指定子を確認することをお勧めします。