月末の日にちを取得する関数

プログラミング

月末を取得する必要があったけど、strtotimeは使えなかった

strtotimeを使ってしまうと、月末に1ヶ月足したりすると、その翌月になってしまったりします。
ex:2012/01/31 + 1month ⇒ 2012/03/02

その時の為の関数が以下。メモ。

private function calc_date($year, $month, $day, $addMonths) {
    $month += $addMonths;
    $dt = mktime(0, 0, 0, $month + 1, 0, $year);
    $endDay = date("d", $dt);
    if($day > $endDay) $day = $endDay;
    $dt = mktime(0, 0, 0, $month, $day, $year);//正規化
    return date("Y-m-d", $dt);
}
echo calc_date(2012, 1, 31, 1);

これを使うと、結果として2012/2/29が表示されます。

最後に

もっと簡単な方法がありそうですが、これで一旦は月末が取れました。

コメントを残す