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

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

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

作成日: 更新日:

基本的な使い方

ISO8601_EXPANDED定数は、PHPのDateTimeImmutableクラスに属する、日付と時刻の国際標準規格ISO 8601の拡張書式を表す定数です。この定数は、日付と時刻の情報を厳密かつ一貫した形式で表現するために使用されます。

この定数が定義する書式は、YYYY-MM-DDTHH:MM:SS[+-]HH:MMのようなパターンに従います。具体的には、年(YYYY)、月(MM)、日(DD)で日付を表し、文字Tの後に時間(HH)、分(MM)、秒(SS)で時刻を表します。最後に、タイムゾーンオフセット([+-]HH:MM)を付加することで、特定の日時がどのタイムゾーンに属するかを明確に示します。例えば、「2023年10月27日15時30分00秒、日本標準時(UTC+09:00)」は、「2023-10-27T15:30:00+09:00」と表現されます。

特に「EXPANDED」(拡張)という名称が示す通り、この書式は通常のISO 8601書式が一般的に4桁の年表記を前提としているのに対し、5桁以上の年を扱うことができる点が大きな特徴です。これにより、西暦10000年以降の未来や紀元前といった、通常の4桁では表現しきれない非常に広い期間の日付も、正確に文字列化し、また解析することが可能です。

DateTimeImmutableクラスやDateTimeクラスのformat()メソッド、またはcreateFromFormat()メソッドなどでこの定数を用いることで、国際的に通用する厳密な日付・時刻文字列を簡単に生成したり、その文字列からDateTimeオブジェクトを復元したりできます。異なるシステム間でのデータ交換や、長期にわたるデータの保存において、日付と時刻の解釈のずれを防ぎ、データの正確性と互換性を保証する上で極めて有用です。特に、通常のシステムが扱わないような広範囲の年代を扱うアプリケーション開発において、この拡張形式は重要な役割を果たします。

構文(syntax)

1<?php
2echo DateTimeImmutable::ISO8601_EXPANDED;

引数(parameters)

引数なし

引数はありません

戻り値(return)

string

DateTimeImmutable::ISO8601_EXPANDEDは、日付と時刻をYYYY-MM-DDTHH:MM:SS.ffffff+HH:MMの形式で表す文字列定数です。

サンプルコード

PHP DateTimeImmutable ISO8601_EXPANDEDで日時フォーマットする

1<?php
2
3/**
4 * 現在の日時をISO 8601拡張形式で出力するサンプル。
5 *
6 * DateTimeImmutable::ISO8601_EXPANDED 定数を使用して、
7 * 現在の日時をISO 8601拡張形式(例: 2023-10-27T10:30:00+00:00)でフォーマットします。
8 * この形式は、システム間で日時データを交換する際の標準として広く利用されます。
9 *
10 * @return void
11 */
12function displayExpandedIso8601DateTime(): void
13{
14    // 現在の日時を表すDateTimeImmutableオブジェクトを作成します。
15    // DateTimeImmutableは、一度作成されると変更されない(immutableな)日時オブジェクトです。
16    $now = new DateTimeImmutable();
17
18    // DateTimeImmutable::ISO8601_EXPANDED 定数をformat()メソッドに渡して、
19    // ISO 8601拡張形式の文字列を生成します。
20    // この定数は、内部的には 'Y-m-d\TH:i:sP' という書式文字列に相当します。
21    $formattedDateTime = $now->format(DateTimeImmutable::ISO8601_EXPANDED);
22
23    // 生成された日時文字列を出力します。
24    echo "現在のISO 8601拡張日時: " . $formattedDateTime . PHP_EOL;
25}
26
27// 関数を実行して、フォーマットされた日時を確認します。
28displayExpandedIso8601DateTime();

このPHPのサンプルコードは、現在の日時を「ISO 8601拡張形式」という国際的な標準形式で表示する方法を示しています。ISO 8601拡張形式は、日付と時刻の情報をシステム間で正確にやり取りするために広く利用される書式です。

まず、new DateTimeImmutable()で現在の日時を表すオブジェクトを作成します。DateTimeImmutableは、一度作成されると内容が変更されない(immutableな)日時オブジェクトであり、予期せぬ変更を防ぎ、信頼性の高い日時処理を可能にします。

次に、この日時オブジェクトのformat()メソッドにDateTimeImmutable::ISO8601_EXPANDED定数を渡して、日時をISO 8601拡張形式の文字列に変換します。この定数自体には引数はなく、内部的には特定の書式文字列(例: 'Y-m-d\TH:i:sP')を保持しており、format()メソッドがその書式に従って日時データを文字列として返します。この戻り値は文字列型です。

生成された日時文字列は、echo文によって画面に出力されます。これにより、システムエンジニアが日時データを扱う際に標準的な形式で表示・利用できることがわかります。特に、API連携やログ記録など、様々なシステムと連携する場面でこの定数は非常に役立ちます。

この定数はPHP 8以降で利用可能です。DateTimeImmutable::ISO8601_EXPANDEDを使用することで、国際標準であるISO 8601拡張形式の日時文字列を、手動での複雑な書式指定なしに、正確かつ簡単に生成できます。これにより、日付フォーマットの間違いを防ぎ、コードの可読性も向上します。生成される日時文字列にはタイムゾーン情報(例: +00:00)が含まれるため、異なるシステム間や地域間で日時データを交換する際に非常に便利で、誤解が生じるのを防げます。また、DateTimeImmutableは一度作成されると内容が変更されないオブジェクトですので、意図しない値の変更を防ぎ、安全に日時を扱える点も覚えておくと良いでしょう。標準的な日時フォーマットの活用は、堅牢なシステム開発において重要です。

PHP ISO8601拡張形式で現在時刻を表示する

1<?php
2
3/**
4 * 現在のDateTimeImmutableオブジェクトをISO 8601拡張形式の文字列に変換して表示します。
5 *
6 * DateTimeImmutable::ISO8601_EXPANDED 定数は、format() メソッドと共に使用され、
7 * ISO 8601の拡張形式 (YYYY-MM-DDTHH:MM:SS+HH:MM または YYYY-MM-DDTHH:MM:SS.u+HH:MM)
8 * で日付時刻を表現します。
9 * これは、特にシステム間の日付時刻データのやり取りで広く利用される標準形式です。
10 */
11function displayCurrentDateTimeAsIso8601Expanded(): void
12{
13    // 現在のシステム時刻を表す不変なDateTimeオブジェクトを生成します。
14    // DateTimeImmutableを使用することで、オブジェクト生成後の状態変更を防ぎ、予測可能なコードになります。
15    $currentDateTime = new DateTimeImmutable();
16
17    // DateTimeImmutable::ISO8601_EXPANDED 定数を使って、現在時刻をISO 8601拡張形式の文字列に変換します。
18    // この定数は、format() メソッドのフォーマット文字列として機能します。
19    $iso8601ExpandedString = $currentDateTime->format(DateTimeImmutable::ISO8601_EXPANDED);
20
21    // 変換された文字列を表示します。
22    echo "現在のシステム時刻(ISO 8601拡張形式): " . $iso8601ExpandedString . "\n";
23}
24
25// 関数を実行し、結果を出力します。
26displayCurrentDateTimeAsIso8601Expanded();

このPHPサンプルコードは、現在のシステム時刻をISO 8601拡張形式の文字列に変換して表示する方法を示しています。PHP 8のDateTimeImmutableクラスは、日付と時刻を安全に扱うための機能で、一度生成されたオブジェクトの状態が変更されない「不変」の特性を持ちます。これにより、コードの予測可能性が高まり、意図しないデータ変更を防ぐことができます。

コードではまず、new DateTimeImmutable()によって、現在のシステム時刻を表すDateTimeImmutableオブジェクトが生成されます。次に、このオブジェクトのformat()メソッドを使用し、DateTimeImmutable::ISO8601_EXPANDED定数を引数として渡しています。

DateTimeImmutable::ISO8601_EXPANDEDは、ISO 8601規格に準拠した拡張形式(例えば、YYYY-MM-DDTHH:MM:SS+HH:MM)で日付時刻をフォーマットするための文字列定数です。この定数自体には引数がありませんが、format()メソッドに渡すことで、日付時刻を特定の形式に整形する際のフォーマット指定子として機能します。その結果、format()メソッドは、指定されたISO 8601拡張形式の日付時刻文字列を戻り値として返します。この形式は、異なるシステム間で日付時刻データをやり取りする際の国際的な標準として広く利用されており、データの互換性を確保する上で非常に重要です。最終的に、変換された日付時刻文字列が画面に出力されます。

DateTimeImmutableは、オブジェクト生成後の状態変更を防ぐ「不変」な特性があり、意図しないバグを防ぎ、コードの予測性を高めます。日付時刻を扱う際には積極的に活用してください。

DateTimeImmutable::ISO8601_EXPANDED定数は、format()メソッドに指定することで、国際標準であるISO 8601拡張形式の文字列を生成します。この形式は、異なるシステム間での日付時刻データ連携において標準的に利用されるため、非常に重要です。

サンプルコードではタイムゾーンが指定されていません。実際のシステム連携では、使用するタイムゾーンを明示的に指定し、意図しないずれが生じないよう注意してください。

関連コンテンツ

関連プログラミング言語