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

【PHP8.x】date_add()関数の使い方

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

作成日: 更新日:

基本的な使い方

date_add関数は、指定されたDateTimeオブジェクトに、特定の期間を加算する関数です。この関数は、PHPで日付や時刻を扱う際に中心となるDateTimeオブジェクトの値を変更するために利用されます。

具体的には、第一引数には期間を加算したいDateTimeオブジェクトを渡します。第二引数には、加算する期間を表すDateIntervalオブジェクトを指定します。例えば、ある日付に1日や数時間を追加したい場合などにこの関数を使用します。DateIntervalオブジェクトは、new DateInterval('P1D')のように、期間を表す文字列を使って簡単に作成することができます。

処理が成功すると、期間が加算されて変更されたDateTimeオブジェクトが返されます。もし何らかの理由で処理に失敗した場合は、falseが返されます。

date_add関数の重要な特徴として、渡されたDateTimeオブジェクトそのものの値を直接変更するという点が挙げられます。これは、元のオブジェクトとは別の新しいオブジェクトを作成して結果を返すDateTimeImmutableクラスのaddメソッドとは異なり、元のDateTimeインスタンスが更新されるため、この動作を理解しておくことが重要です。システム開発において、特定の日付を基準に未来の日付を算出する際に非常に役立ちます。

構文(syntax)

1<?php
2$date = new DateTime('now');
3$interval = new DateInterval('P1D');
4
5date_add($date, $interval);
6?>

引数(parameters)

DateTime $object, DateInterval $interval

  • DateTime $object: 操作対象となるDateTimeオブジェクト
  • DateInterval $interval: 追加する期間を指定するDateIntervalオブジェクト

戻り値(return)

DateTime|false

指定された日時オブジェクトに期間を加算した新しい日時オブジェクト、またはエラーが発生した場合は false を返します。

サンプルコード

PHPで現在時刻に1週間加算する

1<?php
2
3/**
4 * 現在の時刻に1週間を加算して表示するサンプルコード。
5 *
6 * date_add関数は、DateTimeオブジェクトにDateIntervalオブジェクトで指定された期間を加算します。
7 * システムエンジニアを目指す初心者向けに、日付操作の基本を示します。
8 */
9
10// 1. 現在の日時を示すDateTimeオブジェクトを作成します。
11//    DateTimeオブジェクトは日付と時刻を操作するための中心的なクラスです。
12$currentDateTime = new DateTime();
13echo "現在の時刻: " . $currentDateTime->format('Y-m-d H:i:s') . PHP_EOL;
14
15// 2. 1週間を表すDateIntervalオブジェクトを作成します。
16//    'P1W' は「Period 1 Week」(期間1週間)を意味するISO 8601形式の文字列です。
17//    DateIntervalは期間を定義するために使用されます。
18$interval = new DateInterval('P1W');
19
20// 3. date_add関数を使って、現在のDateTimeオブジェクトに1週間を加算します。
21//    date_add関数は、操作が成功した場合に新しいDateTimeオブジェクトを返し、
22//    失敗した場合はfalseを返します。
23$futureDateTime = date_add($currentDateTime, $interval);
24
25// 4. 結果を確認し、表示します。
26if ($futureDateTime !== false) {
27    echo "1週間後の時刻: " . $futureDateTime->format('Y-m-d H:i:s') . PHP_EOL;
28} else {
29    // 実際にはdate_addが失敗することは稀ですが、エラーハンドリングは重要です。
30    echo "日付の加算に失敗しました。" . PHP_EOL;
31}
32
33?>

PHPのdate_add関数は、指定された日時(DateTimeオブジェクト)に特定の期間(DateIntervalオブジェクト)を加算するための関数です。このサンプルコードは、現在の日時に1週間を加算し、未来の日時を計算して表示する一連の流れを示しています。

まず、new DateTime()を使って現在の日時を示すDateTimeオブジェクトを作成します。このオブジェクトは日付と時刻を操作する際の基本となります。次に、new DateInterval('P1W')で「1週間」という期間を定義し、DateIntervalオブジェクトを作成します。ここで使われる'P1W'という文字列は、ISO 8601形式で「期間(Period)1週間(1 Week)」を意味します。

date_add関数の第一引数には日付を加算したいDateTimeオブジェクトを、第二引数には加算する期間を表すDateIntervalオブジェクトを渡します。この関数は、加算処理が成功した場合には、加算後の新しいDateTimeオブジェクトを返します。元のDateTimeオブジェクトは変更されません。もし処理が失敗した場合はfalseが戻り値として返されるため、戻り値の確認は重要です。

サンプルコードでは、date_add関数で現在の日時に1週間を加算し、結果を$futureDateTimeに格納しています。その後、戻り値がfalseでないことを確認し、成功していればformat()メソッドを使って整形された日時文字列を表示しています。これにより、PHPでの日付操作の基本的な手順と、安全なエラーハンドリングの方法を学ぶことができます。

date_add関数は、指定した期間を加算した新しいDateTimeオブジェクトを返します。元のDateTimeオブジェクトは変更されませんので、加算後の時刻は必ず戻り値で受け取ってください。処理が失敗した場合はfalseを返すため、サンプルコードのように戻り値を必ず確認し、エラーハンドリングを行うことが重要です。DateIntervalの期間指定は、'P1W'のようにISO 8601形式で行いますので、他の期間を指定する際もこの書式に従ってください。また、DateTimeオブジェクトには、元のオブジェクトを直接変更するaddメソッドもありますが、date_add関数とは振る舞いが異なる点に注意が必要です。

PHPで現在時刻に時間を加算する

1<?php
2
3/**
4 * 現在の時刻に指定した時間を加算するサンプルコード。
5 * date_add 関数を使用して、DateTime オブジェクトに DateInterval オブジェクトで定義された期間を加算します。
6 */
7
8// 1. 現在の時刻を表す DateTime オブジェクトを作成します。
9$currentDateTime = new DateTime();
10echo "現在の時刻: " . $currentDateTime->format('Y-m-d H:i:s') . "\n";
11
12// 2. 加算したい時間を表す DateInterval オブジェクトを作成します。
13// 例: 'PT3H' は「期間(Period)の3時間(Time 3 Hours)」を意味します。
14// ここでは、3時間を加算するように設定します。
15$hoursToAdd = new DateInterval('PT3H');
16
17// 3. date_add 関数を使用して、現在の DateTime オブジェクトに時間を加算します。
18// date_add は、最初の引数として渡された DateTime オブジェクト自体を変更し、
19// 変更された DateTime オブジェクトを返します(失敗した場合は false)。
20$modifiedDateTime = date_add($currentDateTime, $hoursToAdd);
21
22// 4. 加算処理の成否を確認し、結果を表示します。
23if ($modifiedDateTime === false) {
24    echo "日付の加算に失敗しました。\n";
25} else {
26    // $modifiedDateTime は、$currentDateTime と同じオブジェクトを参照しています。
27    echo "3時間後の時刻: " . $modifiedDateTime->format('Y-m-d H:i:s') . "\n";
28}
29
30?>

PHPのdate_add関数は、指定されたDateTimeオブジェクトに特定の期間を加算するために使用される関数です。システムエンジニアを目指す方にとって、日時を扱う処理は頻繁に発生するため、この関数は非常に役立ちます。

サンプルコードでは、まずnew DateTime()を使って現在の時刻をDateTimeオブジェクトとして取得します。次に、加算したい時間を定義するためにDateIntervalオブジェクトを作成します。例えば、new DateInterval('PT3H')は「3時間」という期間を示し、「期間(P)の(T)3時間(3H)」を意味する書式です。

date_add関数は、引数として加算対象となるDateTimeオブジェクトと、加算する期間を表すDateIntervalオブジェクトを受け取ります。この関数の重要な挙動として、渡された最初のDateTimeオブジェクト自体が直接変更される点が挙げられます。そして、変更後のDateTimeオブジェクトが戻り値として返されますが、日付の加算処理に失敗した場合はfalseを返します。

そのため、処理の成否を確認するために、戻り値がfalseでないかをチェックすることが推奨されます。成功していれば、変更後の日時をformat()メソッドで整形して表示することで、現在時刻に指定した時間が正しく加算された結果を確認できます。このように、date_add関数を使うことで、PHPで簡単に日時の加算処理を実装することが可能です。

date_add関数は、第一引数に渡されたDateTimeオブジェクトの内容を直接変更する点に注意が必要です。元の時刻を保持したい場合は、操作前にDateTimeオブジェクトをcloneメソッドで複製してから使用してください。この関数は、日付の加算に失敗するとfalseを返しますので、必ず戻り値を確認し、適切にエラー処理を行うことが重要です。DateIntervalオブジェクトの作成には、PT3Hのように期間を表す特殊なフォーマットを使用します。これはISO 8601規格に基づいているため、指定する期間を正確に理解して設定してください。

PHP date_addでタイムゾーンとDSTを扱う

1<?php
2
3/**
4 * Demonstrates how to use the date_add function in PHP,
5 * specifically highlighting its interaction with timezones and Daylight Saving Time (DST).
6 *
7 * This function creates a DateTime object with a specific timezone,
8 * adds a DateInterval to it using date_add, and displays the results,
9 * showing how date arithmetic automatically adjusts for DST changes.
10 *
11 * @return void
12 */
13function demonstrateDateAddWithTimezone(): void
14{
15    // 1. Create a DateTime object initialized to a specific date and timezone.
16    //    We choose a date and timezone that will experience a Daylight Saving Time (DST)
17    //    transition within the interval we plan to add.
18    //    For 'Europe/Berlin', DST typically ends on the last Sunday of October,
19    //    when clocks go back from 03:00 CEST (UTC+2) to 02:00 CET (UTC+1).
20    $initialDateTime = new DateTime('2023-10-29 01:00:00', new DateTimeZone('Europe/Berlin'));
21
22    echo "Original DateTime: " . $initialDateTime->format('Y-m-d H:i:s T (P)') . "\n";
23    echo "    (Note: At this specific time, Berlin is in CEST, which is UTC+2.)\n\n";
24
25    // 2. Create a DateInterval object to define the duration to add.
26    //    Adding 3 hours from 01:00 will cause the calculation to cross the
27    //    DST boundary (03:00 CEST reverting to 02:00 CET).
28    $intervalToAdd = new DateInterval('PT3H'); // PT3H means "Period Time 3 Hours"
29
30    echo "DateInterval to add: " . $intervalToAdd->format('%H hours') . "\n\n";
31
32    // 3. Use date_add to add the interval to the DateTime object.
33    //    This function modifies the $initialDateTime object directly and returns it.
34    //    It correctly handles timezone rules, including DST changes.
35    $resultDateTime = date_add($initialDateTime, $intervalToAdd);
36
37    // Always check if the operation was successful, as date_add can return false on failure.
38    if ($resultDateTime === false) {
39        echo "Error: Failed to add the date interval.\n";
40        return;
41    }
42
43    // 4. Display the modified DateTime object and its timezone information.
44    echo "Modified DateTime: " . $resultDateTime->format('Y-m-d H:i:s T (P)') . "\n";
45    echo "    (Note: After the addition, Berlin is in CET, which is UTC+1, due to the DST change.)\n";
46    echo "    The 3-hour addition correctly accounts for the clock going back one hour at 03:00 CEST,\n";
47    echo "    resulting in a 3-hour perceived duration across the timezone shift.\n";
48}
49
50// Execute the demonstration function.
51demonstrateDateAddWithTimezone();

PHPのdate_add関数は、既存のDateTimeオブジェクトに特定の日時期間を加算するための機能です。この関数は、第一引数に加算の対象となるDateTimeオブジェクトを、第二引数に加算したい期間を表すDateIntervalオブジェクトを受け取ります。date_addは、指定されたDateTimeオブジェクト自体を変更し、その変更されたDateTimeオブジェクトを返します。もし加算処理が失敗した場合はfalseを返します。

サンプルコードでは、date_addがタイムゾーンと夏時間(DST)の切り替えを自動的に考慮して日時計算を行う様子を具体的に示しています。特定のタイムゾーン(例: 'Europe/Berlin')で夏時間から通常時間へ移行する日時を設定し、そこに3時間の期間を加算することで、時計が1時間戻るDSTの調整が自動的に行われ、正しく加算後の日時が計算されることが確認できます。これにより、複雑なタイムゾーンの変更時でも、開発者が手動で調整することなく正確な日時計算を行えることがわかります。関数の戻り値がfalseでないかを常に確認する習慣は、エラーに強いプログラムを作成する上で重要です。

date_add関数は、指定されたDateTimeオブジェクトにDateIntervalを加算する際、タイムゾーンおよび夏時間(DST)のルールを自動的に考慮し計算します。そのため、夏時間の切り替わりをまたぐような加算でも、時刻が適切に調整されます。この関数は、引数として渡されたDateTimeオブジェクト自体を直接変更する「破壊的メソッド」です。元のオブジェクトの値を保持したい場合は、date_addを呼び出す前にDateTimeオブジェクトをクローンしておく必要があります。また、処理が失敗した場合にはfalseを返すため、安全にコードを運用するためにも、必ず戻り値を確認しエラーハンドリングを行うようにしてください。

PHP date add years する

1<?php
2
3// 現在の日付と時刻を取得します。
4// DateTimeオブジェクトはデフォルトで現在の日時を表します。
5$currentDateTime = new DateTime();
6echo "現在の日付と時刻: " . $currentDateTime->format('Y-m-d H:i:s') . PHP_EOL;
7
8// 1年を加算するための期間オブジェクトを作成します。
9// 'P1Y' は「期間1年」を意味します(P:Period, 1:数, Y:Year)。
10$interval = new DateInterval('P1Y');
11
12// date_add関数を使用して、現在の日付に1年を加算します。
13// この関数は、加算後の新しいDateTimeオブジェクトを返します。
14// 失敗した場合はfalseを返します。
15$newDateTime = date_add($currentDateTime, $interval);
16
17// 加算が成功したかを確認し、結果を表示します。
18if ($newDateTime instanceof DateTime) {
19    echo "1年加算後の日付と時刻: " . $newDateTime->format('Y-m-d H:i:s') . PHP_EOL;
20} else {
21    // 実際にはDateTimeとDateIntervalが正しく設定されていれば、このエラーは稀です。
22    echo "日付の加算に失敗しました。" . PHP_EOL;
23}
24

PHPのdate_add関数は、指定した日付に特定の期間を加算するために使用されます。この関数は、日付や時刻の計算を行う際に非常に便利です。

サンプルコードでは、まずnew DateTime()を使って現在の日付と時刻を取得し、$currentDateTime変数に格納しています。これは、加算の基準となるDateTimeオブジェクトです。次に、new DateInterval('P1Y')を用いて「1年」という期間を定義し、$interval変数に設定しています。'P1Y'Pは期間(Period)を意味し、1Yは1年を表します。

date_add関数は、これら二つのオブジェクトを引数として受け取ります。第一引数$objectには加算の基準となるDateTimeオブジェクトを、第二引数$intervalには加算したい期間を表すDateIntervalオブジェクトを渡します。関数は、期間が加算された新しい日付と時刻を持つDateTimeオブジェクトを戻り値として返します。もし加算処理に失敗した場合はfalseが返されるため、サンプルコードではif ($newDateTime instanceof DateTime)で戻り値の型を確認し、正常に処理されたかを判断しています。これにより、現在の日付から1年後の日付と時刻が正確に表示されます。

date_add関数は、DateTimeオブジェクトとDateIntervalオブジェクトを引数として受け取り、指定された期間を加算します。DateInterval'P1Y'のように期間を指定し、Pは期間、Yは年を意味しますが、月や日、時間なども同様に指定可能です。この関数は、成功すると加算後の新しいDateTimeオブジェクトを返しますが、失敗した場合はfalseを返します。そのため、if ($newDateTime instanceof DateTime)のように戻り値がfalseでないかを必ず確認し、安全に処理を進めることが重要です。また、DateTimeオブジェクトのformat()メソッドを使うことで、日付の表示形式を自由に設定できます。

関連コンテンツ

関連プログラミング言語