{category}

PHP - DateTime クラス

date_add()

デート・アド(データ操作と変換

意味 日付時刻に期間を加算


date_add()とは?

date_add()関数は、指定された日付時刻に一定の期間を加算するためのPHPの関数です。DateTimeオブジェクトに対して使用し、年、月、日、時間、分、秒などの単位で時間を追加できます。

date_add()の具体的な使い方

複数の期間を加算する例

<?php
$date = new DateTime('2023-06-01');
date_add($date, new DateInterval('P1Y2M3DT4H30M'));
echo $date->format('Y-m-d H:i:s');

👇出力結果

2024-08-04 04:30:00

この例では、date_add()関数を使用して、指定された日付に1年2ヶ月3日4時間30分を加算しています。DateIntervalオブジェクトを使用して複雑な期間を表現しています。

営業日の計算例

<?php
function addBusinessDays($date, $days) {
    $businessDays = 0;
    while ($businessDays < $days) {
        date_add($date, new DateInterval('P1D'));
        if ($date->format('N') < 6) { // 1(月)から5(金)まで
            $businessDays++;
        }
    }
    return $date;
}

$startDate = new DateTime('2023-06-01'); // 木曜日
$endDate = addBusinessDays($startDate, 5);
echo "開始日: " . $startDate->format('Y-m-d (D)') . "\n";
echo "5営業日後: " . $endDate->format('Y-m-d (D)");

👇出力結果

開始日: 2023-06-01 (Thu)
5営業日後: 2023-06-08 (Thu)

この例では、date_add()関数を使用してカスタムの営業日計算関数を作成しています。週末をスキップして指定された営業日数を加算します。

月末を考慮した日付加算

<?php
$dates = [
    new DateTime('2023-01-31'),
    new DateTime('2023-03-31'),
    new DateTime('2023-04-30')
];

foreach ($dates as $date) {
    $original = $date->format('Y-m-d');
    date_add($date, new DateInterval('P1M'));
    echo $original . " の1ヶ月後: " . $date->format('Y-m-d') . "\n";
}

👇出力結果

2023-01-31 の1ヶ月後: 2023-02-28
2023-03-31 の1ヶ月後: 2023-04-30
2023-04-30 の1ヶ月後: 2023-05-30

この例では、月末の日付に対してdate_add()関数で1ヶ月を加算しています。月によって日数が異なる場合の動作を確認できます。

date_add()に関するよくある質問

Q. date_add()と DateTime::add()の違いは?
A. date_add()は手続き型のPHP関数で、DateTime::add()はDateTimeクラスのメソッドです。機能的には同じですが、使用方法が異なります。date_add($date, $interval)のように呼び出すのに対し、DateTime::add()は$date->add($interval)のように呼び出します。オブジェクト指向のコーディングスタイルを好む場合は後者を使用することが多いです。
Q. DateIntervalの'P1M'とは何を意味する?
A. 'P1M'はISO 8601デュレーション形式で、ここでは1ヶ月を表します。'P'は期間(Period)の開始を示し、'1M'は1ヶ月(1 Month)を意味します。同様に、'P1Y'は1年、'P1D'は1日、'PT1H'は1時間を表します。これらを組み合わせて、例えば'P1Y2M3DT4H5M6S'(1年2ヶ月3日4時間5分6秒)のような複雑な期間も表現できます。
Q. 月末の日付に加算するとどうなる?
A. 月末の日付に対して月を加算する場合、結果は必ずしも直感的ではありません。例えば、1月31日に1ヶ月加算すると、2月31日は存在しないため、2月の最終日(28日または29日)になります。同様に、3月31日に1ヶ月加算すると4月30日になります。これは、PHPのDateTimeクラスが日付の整合性を保つように設計されているためです。

date_add()が学べる書籍の紹介

「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、PHPのdate_add()やpreg_match()、strtotime()、max()、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。

よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。

1日5分の暗記でプログラミンが身に付く!プログラミング単語帳 公式ストアで発売中!

HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。


PHPを学べる「プログラミング単語帳」アプリ

プログラミング単語帳がアプリになりました!PHPはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。

収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。

いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。

2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!

2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!


関連するそのほかの単語

preg_match()

正規表現でパターンを検索

種類: 正規表現

strtotime()

日付文字列をタイムスタンプに

種類: 日付時間関数

max()

最大値を返す関数

種類: 数学関数

strip_tags()

HTMLタグを取り除く

種類: XSS対策

__construct()

オブジェクト生成時に実行

種類: マジックメソッド