【PHP8.x】createFromFormatメソッドの使い方

createFromFormatメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

createFromFormatメソッドは、指定されたフォーマット文字列に基づいて新しいDateTimeオブジェクトを生成するメソッドです。このメソッドはDateTimeクラスの静的メソッドとして提供されており、DateTimeオブジェクトのインスタンスを直接作成せずに、文字列から日付や時刻の情報を解析してオブジェクトを生成する際に利用します。

具体的には、第一引数にフォーマット文字列、第二引数に日付と時刻を表す文字列を指定します。フォーマット文字列は、日付や時刻の各要素がどのように表現されているかを定義します。例えば、「Y-m-d H:i:s」というフォーマット文字列は、年(4桁)、月(2桁)、日(2桁)、時(2桁)、分(2桁)、秒(2桁)がハイフンとコロンで区切られていることを意味します。

createFromFormatメソッドは、指定されたフォーマット文字列に基づいて第二引数の文字列を解析し、解析に成功した場合、新しいDateTimeオブジェクトを返します。解析に失敗した場合は、falseを返します。

このメソッドは、外部からの入力データや特定の形式で保存された日付情報をDateTimeオブジェクトとして扱う場合に非常に便利です。例えば、データベースから読み込んだ日付文字列や、ログファイルに記録された日付情報をDateTimeオブジェクトに変換し、日付計算や比較などの処理を行うことができます。

createFromFormatメソッドを利用することで、柔軟なフォーマットに対応した日付解析が可能になり、日付処理に関するコードをより簡潔に記述することができます。ただし、フォーマット文字列と日付文字列が一致しない場合、予期しない結果となる可能性があるため、正確なフォーマット文字列を指定することが重要です。

構文(syntax)

1DateTime::createFromFormat ( string $format , string $datetime , ?DateTimeZone $timezone = null ) : DateTime|false

引数(parameters)

string $format, string $datetime, ?DateTimeZone $timezone = null

  • string $format: 日付と時刻の文字列のフォーマットを指定します
  • string $datetime: フォーマットされた日付と時刻の文字列を指定します
  • ?DateTimeZone $timezone = null: オプション。日付と時刻のタイムゾーンを指定します。指定しない場合は、現在のタイムゾーンが使用されます

戻り値(return)

DateTime|false

指定されたフォーマット文字列で表された日付・時刻文字列を解析し、DateTimeオブジェクトを生成します。解析に失敗した場合はfalseを返します。

サンプルコード

PHP createFromFormat で日付を作成する

1<?php
2
3// 日付文字列とフォーマットを指定して DateTime オブジェクトを作成する
4$format = 'Y-m-d H:i:s';
5$dateString = '2024-01-01 10:00:00';
6
7// DateTimeZone を指定しない場合
8$dateTime = DateTime::createFromFormat($format, $dateString);
9
10if ($dateTime) {
11    echo "DateTime: " . $dateTime->format('Y-m-d H:i:s') . "\n";
12} else {
13    echo "日付の作成に失敗しました。\n";
14}
15
16// DateTimeZone を指定する場合
17$timezone = new DateTimeZone('Asia/Tokyo');
18$dateTimeWithTimezone = DateTime::createFromFormat($format, $dateString, $timezone);
19
20if ($dateTimeWithTimezone) {
21    echo "DateTime (Timezone: Asia/Tokyo): " . $dateTimeWithTimezone->format('Y-m-d H:i:s') . "\n";
22} else {
23    echo "日付の作成に失敗しました。\n";
24}

PHPのDateTimeクラスのcreateFromFormatメソッドは、指定されたフォーマットに基づいて日付文字列からDateTimeオブジェクトを作成します。このメソッドは、日付文字列を解析し、DateTimeオブジェクトに変換する際に非常に便利です。

第一引数$formatには、日付文字列のフォーマットを指定します。例えば、'Y-m-d H:i:s'は、年-月-日 時:分:秒 の形式を表します。第二引数$datetimeには、実際に解析したい日付文字列を渡します。

第三引数$timezoneはオプションで、DateTimeZoneオブジェクトを指定することで、タイムゾーンを設定できます。省略した場合、システムデフォルトのタイムゾーンが使用されます。

サンプルコードでは、まずDateTimeZoneを指定せずにcreateFromFormatを使用しています。次に、Asia/Tokyoタイムゾーンを指定して同様にDateTimeオブジェクトを作成しています。

createFromFormatメソッドは、DateTimeオブジェクトの作成に成功した場合、DateTimeオブジェクトを返します。失敗した場合はfalseを返します。そのため、作成後にif文でfalseが返ってきていないか確認することで、日付文字列が正しく解析されたかどうかを確認できます。

作成されたDateTimeオブジェクトは、formatメソッドを使用して、任意のフォーマットで日付と時刻を表示できます。サンプルコードでは、'Y-m-d H:i:s'フォーマットで表示しています。

DateTime::createFromFormatは、指定したフォーマットに従って日付文字列をDateTimeオブジェクトに変換する関数です。フォーマット文字列と日付文字列が一致しない場合、falseを返すため、必ず戻り値をチェックしましょう。タイムゾーンを指定しない場合、システムの設定に依存します。意図しないタイムゾーンにならないよう、DateTimeZoneオブジェクトを明示的に指定することを推奨します。特に、異なるタイムゾーンの日付データを扱う際には重要です。フォーマット文字列に使用できる文字はPHPマニュアルで確認できます。入力文字列の形式が異なる場合は、適切なフォーマット文字列に変更する必要があります。

【PHP8.x】createFromFormatメソッドの使い方 | いっしー@Webエンジニア