【PHP8.x】RFC3339_EXTENDED定数の使い方

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

作成日: 更新日:

基本的な使い方

RFC3339_EXTENDED定数は、PHPのDateTimeクラスで使用される定義済みの定数です。この定数は、DateTime::format()メソッドなど、日付と時刻の書式設定関数で使用され、RFC3339拡張形式(日付、時刻、およびタイムゾーン情報を含む)で日時文字列をフォーマットすることを指定します。

具体的には、RFC3339形式を拡張したもので、秒の小数点以下の桁数をより細かく表現できます。RFC3339形式は YYYY-MM-DDTHH:MM:SSZ または YYYY-MM-DDTHH:MM:SS±HH:MM の形式ですが、RFC3339_EXTENDED形式では YYYY-MM-DDTHH:MM:SS.ssssssZ または YYYY-MM-DDTHH:MM:SS.ssssss±HH:MM のように、秒の後に小数点以下最大6桁の精度を持つことができます。

システム開発においては、異なるシステム間で日付と時刻の情報を交換する際に、一貫性のあるフォーマットを使用することが重要です。RFC3339_EXTENDED定数を利用することで、日付時刻の情報を標準化された形式で表現し、システム間の相互運用性を高めることができます。例えば、APIを通じてデータを受け渡す際や、データベースに日付時刻情報を格納する際に、この定数を使用することで、フォーマットの不整合による問題を回避できます。また、ログファイルに日付時刻情報を記録する際にも、一貫した形式で記録することで、ログの解析を容易にすることができます。

構文(syntax)

1DateTime::RFC3339_EXTENDED

引数(parameters)

戻り値(return)

string

DateTime::RFC3339_EXTENDED は、RFC 3339 に準拠した拡張フォーマット(例: 2024-03-15T10:30:00+09:00)の文字列表現を返します。

サンプルコード

PHP DateTime RFC3339_EXTENDEDフォーマットで時刻表示

1<?php
2
3/**
4 * 現在のDateTimeオブジェクトをRFC3339_EXTENDEDフォーマットで出力します。
5 *
6 * この関数は、現在の日時を取得し、DateTime::RFC3339_EXTENDED 定数を使用して
7 * RFC 3339 拡張形式(例: 2023-10-27T10:30:45.123456+09:00)にフォーマットします。
8 *
9 * 注意: DateTime::RFC3339_EXTENDED 定数は PHP 8.2.0 以降で導入されました。
10 * PHP 8.2.0 より前の PHP 8.x 環境でこのコードを実行すると、
11 * 未定義のクラス定数エラー (Undefined class constant) が発生します。
12 */
13function displayCurrentTimeInRfc3339ExtendedFormat(): void
14{
15    // 1. 現在の日時を表すDateTimeオブジェクトを作成します。
16    //    DateTimeオブジェクトは、日付と時刻を扱うためのPHPの組み込みクラスです。
17    $now = new DateTime();
18
19    // 2. DateTime::RFC3339_EXTENDED 定数を使って、DateTimeオブジェクトを
20    //    RFC 3339 拡張フォーマットの文字列に変換します。
21    //    この定数は、'Y-m-d\TH:i:s.vP' というフォーマット文字列を表します。
22    //    'Y': 年 (4桁), 'm': 月 (2桁), 'd': 日 (2桁)
23    //    '\T': 文字 'T' (ISO 8601 の日付と時刻の区切り)
24    //    'H': 時 (24時間形式), 'i': 分, 's': 秒, 'v': ミリ秒 (PHP 7.0以降)
25    //    'P': タイムゾーンのオフセット (例: +09:00)
26    $formattedDate = $now->format(DateTime::RFC3339_EXTENDED);
27
28    // 3. フォーマットされた日付文字列を出力します。
29    echo "現在の時刻 (RFC3339_EXTENDED): " . $formattedDate . "\n";
30}
31
32// 上記で定義した関数を実行し、結果を表示します。
33displayCurrentTimeInRfc3339ExtendedFormat();
34

このPHPのサンプルコードは、現在の日時を国際標準であるRFC 3339の拡張形式で表示する方法を示しています。まず、DateTimeクラスの新しいインスタンスを作成し、現在の日時情報を取得します。DateTimeクラスは、日付と時刻をプログラム上で扱うための組み込みクラスです。

次に、このDateTimeオブジェクトのformat()メソッドを使用し、取得した日時を指定された書式に変換します。ここで重要なのがDateTime::RFC3339_EXTENDED定数です。この定数は、日付を「年-月-日T時:分:秒.ミリ秒+タイムゾーンオフセット」という拡張形式の文字列にフォーマットするための特定の書式パターンを定義しています。例えば、「2023-10-27T10:30:45.123456+09:00」のような形式になります。format()メソッドは、この定数で指定された書式に従って日時データを整形し、結果として整形済みの日付文字列を返します。この定数自体は引数を持ちませんが、format()メソッドの引数として渡されることで、戻り値として要求される書式の日時文字列が得られます。

この機能はPHP 8.2.0以降で利用可能です。そのため、PHP 8.2.0より前の環境でこの定数を使用すると、未定義の定数エラーが発生する点に注意が必要です。このコードを実行することで、現在の時刻がRFC 3339拡張形式で画面に出力されます。

PHP 8.2.0未満の環境でDateTime::RFC3339_EXTENDED定数を使用すると「未定義のクラス定数」エラーが発生します。必ずPHPバージョンを確認してください。この定数は、日付と時刻をマイクロ秒まで含むRFC 3339拡張形式を出力します。システム連携などで厳密な時刻情報が必要な場合に、DateTimeクラスのformatメソッドを通じて安全かつ正確な時刻表現を提供します。

【PHP8.x】RFC3339_EXTENDED定数の使い方 | いっしー@Webエンジニア