Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】DateTimeInterface::ISO8601_EXPANDED定数の使い方

ISO8601_EXPANDED定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

ISO8601_EXPANDED定数は、日付と時刻の国際標準規格であるISO 8601に準拠した拡張フォーマットを表す定数です。この定数は、PHPのDateTimeInterfaceを実装するクラス、例えばDateTimeやDateTimeImmutableオブジェクトのformat()メソッドなどで使用され、日付や時刻を特定の文字列形式に変換する際に利用されます。

具体的には、この定数は内部的にY-m-d\TH:i:sPというフォーマット文字列と同等の意味を持ちます。これは、「年-月-日T時:分:秒±タイムゾーン」という形式で、年を4桁で表現し、タイムゾーン情報(UTCからのオフセット)も厳密に含むため、世界中のどの場所でも正確な時刻を識別できる標準的な表現を提供します。

「拡張」という名称は、ISO 8601規格が定義する幅広い表現形式の中でも、特に年の桁数を柔軟に扱える可能性を示唆しています。このフォーマットは、異なるシステム間での日付や時刻データのやり取り、データベースへの保存、APIのレスポンスなど、一貫性のある標準的な日付時刻表現が求められる場面で非常に有効です。正確なタイムゾーン情報が含まれるため、タイムゾーンをまたぐシステム連携においても誤解なくデータを交換できます。この定数を利用することで、開発者は複雑なフォーマット文字列を覚える手間を省き、国際的に通用する信頼性の高い日付時刻フォーマットを簡単に適用できます。

構文(syntax)

1echo DateTimeInterface::ISO8601_EXPANDED;

引数(parameters)

引数なし

引数はありません

戻り値(return)

string

DateTimeInterface::ISO8601_EXPANDED は、ISO 8601 形式で日付と時刻を拡張した文字列を表現するための定数です。この定数は、日付と時刻のフォーマットを指定する際に使用されます。

サンプルコード

PHP ISO8601拡張形式で日時を出力する

1<?php
2
3/**
4 * 現在の日時をDateTimeInterface::ISO8601_EXPANDED定数を使用して、
5 * ISO 8601拡張形式で出力するサンプルコードです。
6 *
7 * この定数は、年が4桁を超えるような日時(例:非常に古い歴史的な日付や遠い未来の日付)も
8 * 正確に表現できるISO 8601フォーマット文字列を提供します。
9 * PHP 8で導入され、ミリ秒(.v)とタイムゾーンオフセット(P)を含みます。
10 */
11function displayCurrentDateTimeInExpandedIso8601(): void
12{
13    // 現在の日時を表すDateTimeオブジェクトを生成します。
14    $now = new DateTime();
15
16    // DateTimeInterface::ISO8601_EXPANDED定数を使って、
17    // 日時をISO 8601拡張形式(例: YYYY-MM-DDTHH:MM:SS.vP)でフォーマットします。
18    $formattedDateTime = $now->format(DateTimeInterface::ISO8601_EXPANDED);
19
20    // フォーマットされた日時を出力します。
21    echo "現在の日時 (ISO 8601拡張形式): " . $formattedDateTime . PHP_EOL;
22}
23
24// 上記の関数を実行します。
25displayCurrentDateTimeInExpandedIso8601();

このサンプルコードは、PHP 8で導入されたDateTimeInterface::ISO8601_EXPANDED定数を使用して、現在の日時をISO 8601拡張形式で出力する方法を示しています。この定数は、日付と時刻を国際標準であるISO 8601形式のうち、特に「拡張形式」で文字列として表現するための書式指定子です。通常のISO 8601形式に加えて、年が4桁を超える日時(例: 紀元前の非常に古い日付や遠い未来の日付)も正確に表現できる点が特徴です。また、ミリ秒(.v)とタイムゾーンオフセット(.P)も含む、「YYYY-MM-DDTHH:MM:SS.vP」のような具体的な形式で日時を整形します。

コードではまず、new DateTime()で現在の日時を表すDateTimeオブジェクトを生成します。次に、このオブジェクトのformat()メソッドを呼び出し、引数にDateTimeInterface::ISO8601_EXPANDED定数を渡しています。この定数自体は引数を持ちませんが、format()メソッドに渡されることで、指定された拡張ISO 8601形式の日時文字列が生成され、その文字列が戻り値として返されます。最終的に、生成された日時文字列は画面に出力されます。システム間で日時データを正確にやり取りする際に非常に有用な機能です。

この定数はPHP 8以降でのみ利用可能です。古いバージョンで実行すると未定義エラーが発生しますので、必ずPHPのバージョンを確認してください。DateTimeInterface::ISO8601_EXPANDEDは、年が4桁を超えるような日時、ミリ秒、タイムゾーンオフセットまで厳密に扱えるISO 8601拡張形式を提供します。

内部的にはY-m-d\TH:i:s.vPという複雑なフォーマット文字列を定数として持っているため、この定数を使用することで、手動で書式を指定する際の間違いを防ぎ、コードの可読性も向上します。特に、国際的なデータ連携やログ出力など、厳格な日時形式が求められるシステムで活用すると良いでしょう。

PHP ISO8601拡張フォーマットで日時を変換する

1<?php
2
3/**
4 * 現在の日時をISO 8601拡張フォーマットに変換して表示する関数。
5 *
6 * DateTimeImmutableオブジェクトとDateTimeInterface::ISO8601_EXPANDED定数を使用し、
7 * 日時データを標準的なISO 8601拡張文字列形式に変換します。
8 * このフォーマットは、年が5桁以上になる可能性も考慮した完全なISO 8601形式です。
9 */
10function displayCurrentDateAsIso8601Expanded(): void
11{
12    // 現在の日時を表すDateTimeImmutableオブジェクトを作成します。
13    $now = new DateTimeImmutable();
14
15    // DateTimeInterface::ISO8601_EXPANDED定数を使用して、
16    // 日時をISO 8601拡張フォーマットの文字列に変換します。
17    // 例: "2023-10-27T10:00:00.123456+09:00"
18    $iso8601ExpandedString = $now->format(DateTimeInterface::ISO8601_EXPANDED);
19
20    // 変換されたISO 8601拡張フォーマットの文字列を出力します。
21    echo "現在のISO 8601拡張フォーマットの日時: " . $iso8601ExpandedString . PHP_EOL;
22}
23
24// 上記の関数を実行し、結果を表示します。
25displayCurrentDateAsIso8601Expanded();

このサンプルコードは、PHPで現在の日時を国際標準であるISO 8601拡張フォーマットの文字列に変換し、表示する方法を示しています。システム間で日時データを正確にやり取りする際に、標準化されたフォーマットを使用することは非常に重要です。

コードではまず、displayCurrentDateAsIso8601Expandedという関数内で、new DateTimeImmutable()を使って現在の日時を表すオブジェクトを作成しています。DateTimeImmutableオブジェクトは、一度作成されるとその状態が変更されない(不変である)という特性を持っています。

次に、このDateTimeImmutableオブジェクトのformat()メソッドを呼び出します。format()メソッドは、引数として渡されたフォーマット文字列に従って日時を整形し、その結果を新しい文字列として返します。ここで引数として利用されているのが、DateTimeInterface::ISO8601_EXPANDEDという定数です。

DateTimeInterface::ISO8601_EXPANDEDは、DateTimeInterfaceインターフェースに定義されている文字列定数で、ISO 8601拡張フォーマットを表す特定のパターンを持っています。この定数自体は引数を取りませんが、その値がformat()メソッドに渡されることで、年が5桁以上になる可能性も考慮された、より厳密なISO 8601形式の文字列(例えば "2023-10-27T10:00:00.123456+09:00")が戻り値として得られます。

最終的に、変換されたISO 8601拡張フォーマットの日時文字列がecho文によって画面に出力されます。このコードは、標準的な日時フォーマットへの変換をPHPで安全かつ簡潔に行う方法を学ぶ上で役立ちます。

このISO8601_EXPANDED定数は、ISO 8601形式の中でも年が5桁以上になる場合に対応できる「拡張版」であることを理解しましょう。一般的なISO 8601フォーマットが必要な場合は、別の定数を使用する必要があります。サンプルコードで使われているDateTimeImmutableは、一度生成された日時オブジェクトが変更されないため、予期せぬデータの改変を防ぎ、より堅牢なコード作成に役立ちます。日時変換時には、システムのデフォルトタイムゾーンが適用されることに注意してください。国際的なシステムや正確な日時表現が必要な場合は、DateTimeZoneクラスを使って明示的にタイムゾーンを指定することを強くお勧めします。また、この定数はPHP 8以降で利用可能であるため、PHPのバージョンを確認してください。

関連コンテンツ

関連プログラミング言語