$time = strtotime('next month'); echo date('Y/m/d', $time);「2018/05/13」と表示される。
また、今日だけではなくて任意の日時を指定すると
$time1 = mktime(4, 32, 10, 6, 5, 1987); $time2 = strtotime('next month', $time1); echo date('Y/m/d', $time1) . ' -> ' . date('Y/m/d', $time2);「1987/06/05 -> 1987/07/05」と表示される。
とまあ、strtotime('next month')は翌月の同日を返してくれて便利な訳だが、、
そう、翌月の同日、ということで、該当する日付が無い場合はどうなる?
$time1 = mktime(0, 0, 0, 3, 31, 2018); $time2 = strtotime('next month', $time1); echo date('Y/m/d', $time1) . ' -> ' . date('Y/m/d', $time2);「2018/03/31 -> 2018/05/01」と表示される!
3月31日の翌月同日は、広義の4月31日となるが、実在しないため、4月30日+1日と解釈されて5月1日となる。
っということですね(-_-;)
ということは…1月31日だと
$time1 = mktime(0, 0, 0, 4, 31, 2018); $time2 = strtotime('next month', $time1); echo date('Y/m/d', $time1) . ' -> ' . date('Y/m/d', $time2);「2018/01/31 -> 2018/03/03」と表示される。やはり、2月31日→2月28日+3日→3月3日ってことですね…。
うーん、こうなるということを覚えておかないと、将来罠にハマりそうだ。
こんな記事を書いたことすら忘れてそうだが…(;´Д`)
strtotimeでは、他にも柔軟な書式に対応しているので、下記リファレンスは一読の価値ありかと。
PHP: 相対的な書式 - Manual
例えば、「来月の第3水曜日」とか