mktime好きな人多いな(苦笑

いわゆるサマータイムを使いたいなら別だけど,それこそstrtotime使ったほうが可読性が高いと思うんだけど.

1. $next = strtotime("+1 month");

のように現在のタイムスタンプからの計算では無く、この時点で年($y)と月($m)がわかっているのだから

1. $next = strtotime("+1 month", mktime(0, 0, 0, $m, 1, $y));

のようにして $y 年 $m 月1日のタイムスタンプで計算するのはどうでしょう?

これと等価な処理だとこういう感じでしょうか.

$next = strtotime('+1 month', strtotime("$y-$m-01");
// もしくは
$next = strtotime("+1 month $y-$m-01");
// もしくは
$next = strtotime("$y-$m-01 +1 month");

ついでに気になったので...
コードの他の部分を見ていませんので、ハズしているかも知れませんが、
form から得られた値を鵜呑みにして $y, $m に代入しているように思うのですが?

  • 3000年とか、14月とかの値が与えられる事は有り得ませんか?

とか含めて上の例ももうちょっとちゃんと組んだほうがいいけど.