PHPで数日前/数日後を計算
基準日からの経過した(明日、昨日、週、月、年、秒、分、時間)日時の計算方法 (mktime, strtotime)
PHP
// 現在 2024-12-04
date('Y-m-d');
// ミリ秒含む 2024-12-04 01:47:34.180
date('Y-m-d H:i:s') . '.' . substr(microtime(), 2, 3);
// 明日 2024-12-05
date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') + 1, date('Y')));
date('Y-m-d', strtotime('+1 day'));
date('Y-m-d', strtotime('tomorrow'));
$dt = new DateTime();
$dt->modify('+1 day')->format('Y-m-d');
// 時間まで含めると結果が異なるので注意
// date('Y-m-d H:i:s', strtotime('+1 day'));
// 2024-12-05 01:47:34
// date('Y-m-d H:i:s', strtotime('tomorrow'));
// 2024-12-05 00:00:00
// 昨日 2024-12-03
date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')));
date('Y-m-d', strtotime('-1 day'));
date('Y-m-d', strtotime('yesterday'));
$dt = new DateTime();
$dt->modify('-1 day')->format('Y-m-d');
// 1週間後 2024-12-11
date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') + 7, date('Y')));
date('Y-m-d', strtotime('+1 week'));
$dt = new DateTime();
$dt->modify('+1 week')->format('Y-m-d');
// 1ヵ月後 2025-01-04
date('Y-m-d', mktime(0, 0, 0, date('m') + 1, date('d'), date('Y')));
date('Y-m-d', strtotime('+1 month'));
$dt = new DateTime();
$dt->modify('+1 month')->format('Y-m-d');
// 180日後 2025-06-02
date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') + 180, date('Y')));
date('Y-m-d', strtotime('+180 days'));
// 1年後 2025-12-04
date('Y-m-d', mktime(0, 0, 0, date('m'), date('d'), date('Y') + 1));
date('Y-m-d', strtotime('+1 year'));
$dt = new DateTime();
$dt->modify('+1 year')->format('Y-m-d');
// 30秒後 2024-12-04 01:48:04
date('Y-m-d H:i:s', mktime(date('H'), date('i'), date('s') + 30, date('m'), date('d'), date('Y') + 1));
date('Y-m-d H:i:s', time() + 30);
date('Y-m-d H:i:s', strtotime('+30 sec'));
$dt = new DateTime();
$dt->modify('+30 sec')->format('Y-m-d H:i:s');
// 30分後 2024-12-04 02:17:34
date('Y-m-d H:i:s', mktime(date('H'), date('i') + 30, date('s') + 30, date('m'), date('d'), date('Y') + 1));
date('Y-m-d H:i:s', time() + 60 * 30);
date('Y-m-d H:i:s', strtotime('+30 min'));
$dt = new DateTime();
$dt->modify('+30 min')->format('Y-m-d H:i:s');
// 24時間後 2024-12-05 01:47:34
date('Y-m-d H:i:s', mktime(date('H') + 24, date('i'), date('s') + 30, date('m'), date('d'), date('Y') + 1));
date('Y-m-d H:i:s', time() + 60 * 60 * 24);
date('Y-m-d H:i:s', strtotime('+24 hours'));
$dt = new DateTime();
$dt->modify('+24 hours')->format('Y-m-d H:i:s');
// 先月初 2024-11-01
date('Y-m-d', mktime(0, 0, 0, date('m') - 1, 1, date('Y')));
// 今月初 2024-12-01
date('Y-m-d', mktime(0, 0, 0, date('m'), 1, date('Y')));
// 来月初 2025-01-01
date('Y-m-d', mktime(0, 0, 0, date('m') + 1, 1, date('Y')));
// 先月末 2024-11-30
date('Y-m-d', mktime(0, 0, 0, date('m'), 0, date('Y')));
date('Y-m-d', strtotime(date('Y-m-01') . ' -1 day'));
date('Y-m-t', mktime(0, 0, 0, date('m') - 1, 1, date('Y')));
// 今月末 2024-12-31
date('Y-m-d', mktime(0, 0, 0, date('m') + 1, 0, date('Y')));
date('Y-m-d', strtotime(date('Y-m-01') . ' +1 month -1 day'));
date('Y-m-t');
// 来月末 2025-01-31
date('Y-m-d', mktime(0, 0, 0, date('m') + 2, 0, date('Y')));
date('Y-m-d', strtotime(date('Y-m-01') . ' +2 month -1 day'));
date('Y-m-t', mktime(0, 0, 0, date('m') + 1, 1, date('Y')));
// 先週の水曜日 2024-11-27
date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') - 7 - date('w') + 3, date('Y')));
// 今週の水曜日 2024-12-04
date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') - date('w') + 3, date('Y')));
// 来週の水曜日 2024-12-11
date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') + 7 - date('w') + 3, date('Y')));
// 任意の日時を基準に計算
$y = '2024';
$m = '12';
$d = '4';
date('Y-m-d', mktime(0, 0, 0, $m, $d + 1, $y));
date('Y-m-d', strtotime('2024-12-04 +1 day'));
date('Y-m-d', strtotime('2024-12-04 tomorrow'));
// 年齢 10歳
floor((date('Ymd') - 20140101)/10000);
strtotimeは8.1から非推奨。