[PHP]date_modify()関数完全解説!日付の変更を簡単に操作しよう

PHP

こんにちは!今回は、PHPで日付を柔軟に操作できるdate_modify()関数について詳しく解説していきます。

📅 date_modify()とは?

date_modify()は、DateTimeオブジェクトの日付や時刻を変更するための関数です。
文字列による相対的な日付指定が可能で、直感的に使用できます。

🔰 基本的な使い方

$date = new DateTime();
$date->modify('+1 day'); // 1日後
echo $date->format('Y-m-d');

💡 よく使う修正パターン

1. 日付の加算・減算

$date = new DateTime('2024-01-15');

// 日数
$date->modify('+1 day');    // 1日後
$date->modify('-2 days');   // 2日前

// 週
$date->modify('+1 week');   // 1週間後
$date->modify('-2 weeks');  // 2週間前

// 月
$date->modify('+1 month');  // 1ヶ月後
$date->modify('-2 months'); // 2ヶ月前

// 年
$date->modify('+1 year');   // 1年後
$date->modify('-2 years');  // 2年前

2. 時間の加算・減算

$date = new DateTime('2024-01-15 12:00:00');

// 時間
$date->modify('+1 hour');    // 1時間後
$date->modify('-2 hours');   // 2時間前

// 分
$date->modify('+30 minutes'); // 30分後
$date->modify('-15 minutes'); // 15分前

// 秒
$date->modify('+45 seconds'); // 45秒後
$date->modify('-30 seconds'); // 30秒前

🎯 実践的な使用例

1. 営業日の計算

function getNextBusinessDay($date) {
    $datetime = new DateTime($date);

    do {
        $datetime->modify('+1 day');
    } while ($datetime->format('N') >= 6); // 土日をスキップ

    return $datetime->format('Y-m-d');
}

// 使用例
echo getNextBusinessDay('2024-01-12'); // 金曜日から次の営業日

2. 月末日の取得

function getLastDayOfMonth($date) {
    $datetime = new DateTime($date);
    $datetime->modify('last day of this month');
    return $datetime->format('Y-m-d');
}

// 使用例
echo getLastDayOfMonth('2024-01-15');

3. 特定の曜日を取得

function getNextSpecificDay($date, $dayName) {
    $datetime = new DateTime($date);
    $datetime->modify('next ' . $dayName);
    return $datetime->format('Y-m-d');
}

// 使用例
echo getNextSpecificDay('2024-01-15', 'Monday');

📝 便利な修正文字列

$date = new DateTime();

// 月の最初と最後
$date->modify('first day of this month');
$date->modify('last day of this month');

// 来月・先月
$date->modify('first day of next month');
$date->modify('last day of previous month');

// 特定の曜日
$date->modify('next Monday');
$date->modify('last Sunday');

// 四半期
$date->modify('first day of january this year');
$date->modify('last day of march this year');

⚠️ 注意点とエラー処理

function safeModifyDate($date, $modifier) {
    try {
        $datetime = new DateTime($date);
        $datetime->modify($modifier);
        return $datetime->format('Y-m-d');
    } catch (Exception $e) {
        return "エラー: " . $e->getMessage();
    }
}

💡 応用テクニック

1. 日付範囲の生成

function generateDateRange($start, $end) {
    $dates = [];
    $current = new DateTime($start);
    $last = new DateTime($end);

    while ($current <= $last) {
        $dates[] = $current->format('Y-m-d');
        $current->modify('+1 day');
    }

    return $dates;
}

2. 期限切れチェック

function isExpired($date, $duration) {
    $expiryDate = new DateTime($date);
    $expiryDate->modify($duration);
    return new DateTime() > $expiryDate;
}

// 使用例
$isExpired = isExpired('2024-01-01', '+30 days');

3. 定期的なイベントの日程生成

function generateRecurringEvents($startDate, $count, $interval) {
    $dates = [];
    $date = new DateTime($startDate);

    for ($i = 0; $i < $count; $i++) {
        $dates[] = $date->format('Y-m-d');
        $date->modify($interval);
    }

    return $dates;
}

// 使用例
$events = generateRecurringEvents('2024-01-01', 5, '+1 week');

まとめ

date_modify()の主な特徴:

  • 直感的な文字列による日付操作
  • 柔軟な日付・時刻の加算・減算
  • 様々な時間単位に対応
  • 特定の日付(月末など)の取得が容易

活用シーン:

  • 営業日の計算
  • イベントスケジュールの管理
  • 期限切れチェック
  • 定期的なタスクの日程管理

タイトルとURLをコピーしました