質問: date("Y-m-t",strtotime("+".$this->rsvConf->monthLimit." month" ,strtotime($data->firstDay))); ```
回答: * 提示されたコードをベースに考えると↓のように考えることができます。 ``` if($data->qDateTo < $data->qLastDay) { $month = date("m", strtotime($data->qDateTo)); foreach (range(date("d", strtotime($data->qDateTo)), date("d", strtotime($data->qLastDay)) -1 ) as $diffday) { echo $month."/".$diffday."\r\n"; } } ``` 単に文字をechoしてますが、DateTimeなどにするのは容易でしょう。 * ところで、上記をぱっと書いてみて、最初、+1/-1をつけていなかったら、03/28とか03/31とかもechoされました。そこで質問やコメントをおさらいしてみると > > 算出したいのは2/28の一ヶ月後の場合3/29と3/30 > > > である(それが一貫性をもって述べられている)ということが分かりました。そして↑では+1とか-1を入れました。 そこで+1/-1を入れる前に思ったんですが、これって、2月の月末でしかおきませんよね?つまり、いわゆる小の月(30日までの月)で月末が基準となって、大の月(31日までの月)の月末が指されたとしても、元の月の月末日である30日は(2/28の28日に対応する3/28が除外されるように)除外され、指し先の月の月末日である31日は(3/31が除外されるように)除外されるわけで、2/28から大の月のパターンで大の月/29と大の月/30。他の小の月で、小の月/29。うるうどしでは29日が除外されて2/29から大の月で大の月/30のみ。 これって、基準日`$data->today`が2月末日であるかのifと`$data->qLastDay`が何日であるかのifから求まりませんか? (結局のところ、問題は"月末"ではなく"2月"の話ということなので、質問者さんがどういう問題をかかえて、何をやりたかったのか意図が全く分かりません)