24
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHPで日、月、年の加算と減算方法

Last updated at Posted at 2020-10-16

特定の日付を元に明日の日付や1週間後の日付、一時間後の時間などの日時の加算や、昨日の日付や昨年の日付などの日時の減算の方法です。
PHPのstrtotime関数やDateTimeクラスを使えば簡単に取得できます。

※先月の日付を取得する際は、月末日の関係でおかしな日付になることもあるので注意!
(last day of previous month)を使ってください。

strtotime関数

strtotime関数の詳細はこちらを参考にしてください。
YYYY-mm-ddは元となる日付です。

PHPで日付の加算をする

echo date("Y-m-d", strtotime("YYYY-mm-dd 1 day")); // 1日後の日付を取得する場合
echo date("Y-m-d", strtotime("YYYY-mm-dd 1 month")); // 1週間後の日付を取得する場合
echo date("Y-m-d", strtotime("YYYY-mm-dd 1 year")); // 一ヶ月後の日付を取得する場合
echo date("Y-m-d", strtotime("YYYY-mm-dd 1 week")); // 1年後の日付を取得する場合

//例
echo date("Y-m-d", strtotime("1 day")); // 2023-01-31
//又は
echo date("Y-m-d", strtotime("2022-12-31 1 day")); // 2023-01-01

PHPで日付の減算をする

echo date("Y-m-d", strtotime("YYYY-mm-dd -1 day")); // 1日前の日付を取得する場合
echo date("Y-m-d", strtotime("YYYY-mm-dd -1 month")); // 1週間前の日付を取得する場合
echo date("Y-m-d", strtotime("YYYY-mm-dd -1 year")); // 一ヶ月前の日付を取得する場合
echo date("Y-m-d", strtotime("YYYY-mm-dd -1 week")); // 1年前の日付を取得する場合

//例
echo date("Y-m-d", strtotime("-1 day")); // 2022-12-30
//又は
echo date("Y-m-d", strtotime("2022-12-31 -1 day")); // 2022-12-30

DateTimeクラス

DateTimeクラスの詳細はこちらを参考にしてください。
YYYY-mm-ddは元となる日付です。

PHPで日付の加算をする

$date = new DateTime('now'); // 又は $date = new DateTime('YYYY-mm-dd');
$date->modify('+1 day'); // 1日後の日付を取得する場合
$date->modify('+1 week'); // 1週間後の日付を取得する場合
$date->modify('+1 month'); // 一ヶ月後の日付を取得する場合
$date->modify('+1 year'); // 1年後の日付を取得する場合

$date->modify('+1 day +1 week +1 month +1 year'); // 複数の場合

// 表示フォーマットは自由に変更できます。
echo $date->format('Y-m-d');

//例
$date = new DateTime('2022-12-31');
$date->modify('+1 day');
echo $date->format('Y-m-d'); // 2023-01-01

PHPで日付の減算をする

$date = new DateTime('now'); // 又は $date = new DateTime('YYYY-mm-dd');
$date->modify('-1 day'); // 1日前の日付を取得する場合
$date->modify('-1 week'); // 1週間前の日付を取得する場合
$date->modify('-1 month'); // 一ヶ月前の日付を取得する場合
$date->modify('-1 year'); // 1年前の日付を取得する場合

$date->modify('-1 day -1 week -1 month -1 year'); // 複数の場合

// 表示フォーマットは自由に変更できます。
echo $date->format('Y-m-d');

//例
$date = new DateTime('2022-12-31');
$date->modify('-1 day');
echo $date->format('Y-m-d'); // 2022-12-30

日数算出

2つの日付の日数差を計算(日数のみ)

  $date1 = strtotime("2023-02-03");
  $date2 = strtotime("2023-02-02");

  // 秒数を86400で割ると日数になります
  // 86400 = (60 * 60 * 24)
  $date3 = ($date1 - $date2) / 86400;
  echo $date3 . '日'; // 1日

※UNIXタイムスタンプは、1970年1月1日00時00分00秒UTC(協定世界時と一致する標準時)らの経過秒数です。例えば2019年5月15日1時34分25秒のUNIXタイムスタンプは 1557851665 となります。

フォーマット一覧

フォーマット 説明
now 現在の日時を取得
tomorrow 明日の日付を取得
yesterday 昨日の日付を取得
+1 day 1日後の日時を取得
+1 week 1週間後の日時を取得
+1 month 1ヶ月後の日時を取得
+1 year 1年後の日時を取得
+1 hour 1時間後の日時を取得
+1 minute 1分後の日時を取得
+1 second 1秒後の日時を取得
last day of previous month 先月の末日を取得
項目 フォーマット 説明 サンプル
Y 西暦(4桁) 2024
y 西暦(2桁) 24
L うるう年→1、普通の年→0 0, 1
m 月(2桁) 01〜12
n 月(先頭の0なし) 1〜12
M 英語(略語) Jan〜Dec
F 英語 January〜December
d 日(2桁) 01〜31
j 日(先頭の0なし) 1〜31
t その月の日数 28〜31
z その年の経過日数 0〜365
曜日・週 D 英語(略語) Mon〜Sun
l 英語 Sunday〜Saturday
w 曜日(日曜0→土6) 2
W ISO 8601 月曜日に
始まる年単位の週番号
42 (年の第 42 週目)
時間 H 24時間単位 00〜23
G 24時間単位(先頭の0なし) 0〜23
h 12時間単位 01〜12
g 12時間単位(先頭の0なし) 1〜12
a 午前/午後(小文字) am
A 午前/午後(大文字) AM
i 分(2桁) 00〜59
s 秒(2桁) 00〜59

その他の記事

【令和も対応】PHPで和暦⇔西暦変換
https://qiita.com/thiagomatsui/items/57201fea2b4853654bec

参考サイト

https://blog.codecamp.jp/php-datetime-calc
https://www.flatflag.nir87.com/modify-495

24
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?