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

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

作成日: 更新日:

基本的な使い方

createFromDateStringメソッドは、日付や時刻を表す文字列からDateIntervalオブジェクトを生成するメソッドです。DateIntervalオブジェクトは、2つの日付や時刻の差を表す際に使用され、期間を表現するために利用されます。このメソッドを使うことで、例えば「1週間」「3ヶ月」「2年」といった期間を文字列で指定し、それをDateIntervalオブジェクトとしてプログラム内で扱えるようになります。

具体的には、createFromDateStringメソッドは、相対的な日付/時刻の指定を文字列として受け取り、その指定に基づいてDateIntervalオブジェクトを生成します。相対的な指定とは、「+1 day」「-2 weeks」「next monday」といった、基準となる日時からの相対的な変化を表す文字列のことです。

このメソッドはstaticメソッドとして定義されているため、DateIntervalクラスのインスタンスを作成せずに、DateInterval::createFromDateString()のように直接呼び出すことができます。引数には、期間を表す文字列を渡します。

例えば、DateInterval::createFromDateString('1 week')と記述すると、1週間を表すDateIntervalオブジェクトが生成されます。このオブジェクトをDateTimeオブジェクトに対してaddメソッドやsubメソッドと組み合わせて使用することで、日付や時刻の計算を簡単に行うことができます。

createFromDateStringメソッドは、日付と時刻の操作を柔軟に行うための強力なツールであり、システム開発において、ユーザーからの入力を元に期間を計算したり、特定のイベントまでの残り時間を算出したりするような場合に非常に役立ちます。エラーが発生した場合、このメソッドは false を返します。

構文(syntax)

1DateInterval::createFromDateString(string $time): DateInterval|false

引数(parameters)

string $datetime

  • string $datetime: 日時を表す文字列。MySQL、ISO 8601、RFC 2822 などのフォーマットに対応しています。

戻り値(return)

DateInterval|false

指定された文字列から DateInterval オブジェクトを生成します。生成に失敗した場合は false を返します。

サンプルコード

DateInterval::createFromDateString で間隔を生成する

1<?php
2
3declare(strict_types=1);
4
5/**
6 * DateInterval::createFromDateString() の使用例を示します。
7 *
8 * この関数は、相対的な日付/時間の書式を含む文字列から
9 * DateInterval オブジェクトを生成する方法をデモンストレーションします。
10 */
11function createIntervalFromStringExample(): void
12{
13    // --- 例1: 未来の間隔を生成 ---
14    // '1 day' (1日後) という文字列から DateInterval オブジェクトを生成します。
15    $dateStringFuture = '1 day';
16    $intervalFuture = DateInterval::createFromDateString($dateStringFuture);
17
18    // オブジェクトの生成が成功したかを確認します。
19    // 戻り値は成功時に DateInterval オブジェクト、失敗時に false となります。
20    if ($intervalFuture instanceof DateInterval) {
21        // 現在の日時オブジェクトを生成します。
22        $now = new DateTime();
23        echo '現在の日時: ' . $now->format('Y-m-d H:i:s') . PHP_EOL;
24
25        // 現在日時に、生成した間隔 (1日) を加えます。
26        $now->add($intervalFuture);
27        echo "「{$dateStringFuture}」を適用した日時: " . $now->format('Y-m-d H:i:s') . PHP_EOL;
28    }
29
30    echo PHP_EOL;
31
32    // --- 例2: 過去の間隔を生成 ---
33    // '1 month ago' (1ヶ月前) という文字列から DateInterval オブジェクトを生成します。
34    $dateStringPast = '1 month ago';
35    $intervalPast = DateInterval::createFromDateString($dateStringPast);
36
37    if ($intervalPast instanceof DateInterval) {
38        $anotherDate = new DateTime('2023-10-25');
39        echo '基準の日時: ' . $anotherDate->format('Y-m-d') . PHP_EOL;
40
41        // 基準日時に、生成した間隔 (1ヶ月前) を適用します。
42        $anotherDate->add($intervalPast);
43        echo "「{$dateStringPast}」を適用した日時: " . $anotherDate->format('Y-m-d') . PHP_EOL;
44
45        // 'ago' を含む場合、invert プロパティが 1 (負の間隔) になります。
46        echo 'invert プロパティの値: ' . $intervalPast->invert . PHP_EOL;
47    }
48}
49
50// 関数を実行してサンプルコードの出力を表示します。
51createIntervalFromStringExample();

PHPのDateInterval::createFromDateStringメソッドは、相対的な日付や時間の表現を含む文字列から、期間を表すDateIntervalオブジェクトを生成するための静的メソッドです。引数$datetimeには、「1 day」(1日後)や「1 month ago」(1ヶ月前)のような、人間が理解しやすい形式の文字列を指定します。このメソッドは、期間の生成に成功するとDateIntervalオブジェクトを返し、文字列が不正な形式などで失敗した場合はfalseを返します。そのため、戻り値がDateInterval型であるかを確認することが推奨されます。

サンプルコードでは、このメソッドの二つの使用例を示しています。まず、「1 day」という文字列から1日分の期間を表すDateIntervalオブジェクトを作成し、現在の時刻にその期間を加算して未来の日時を計算しています。次に、「1 month ago」という文字列から1ヶ月前の期間を表すDateIntervalオブジェクトを生成し、特定の基準日時から1ヶ月前の日時を計算する例です。特に「ago」を含む文字列を使用した場合、生成されたDateIntervalオブジェクトのinvertプロパティが1となり、期間が過去方向であることを示します。このように作成されたDateIntervalオブジェクトは、DateTimeオブジェクトのadd()メソッドなどで日付計算に柔軟に利用できます。

DateInterval::createFromDateString()は、相対的な日付文字列から期間オブジェクトを生成します。この関数は、成功時にDateIntervalオブジェクト、失敗時にfalseを返します。そのため、常にinstanceof DateIntervalで戻り値の型を確認し、エラー処理を行うことが重要です。引数には「1 day」や「1 month ago」のような相対的な日付文字列を指定します。「2023-01-01」のような絶対日付は意図しない結果を招く可能性があります。「ago」を含む文字列の場合、生成されるDateIntervalinvertプロパティが1となり、DateTime::add()メソッドに適用すると過去の日時が計算されます。この挙動を理解し、日付計算を安全に行いましょう。

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