山崎@ひさびさです。
> $lastmonth = mktime(0, 0, 0, 3-1, 30, 2005);
> で、計算すると
> $lastmonth = mktime(0, 0, 0, 2, 30, 2005);
> となり、
> 2/30 がありえないので PHP が気をきかせて
> 3/2 になったのではないでしょうか?
>
ということだと思います。
$lastmonth = mktime(0, 0, 0, date("m"), 0, date("Y"));
で前の月の末日(の0時0分0秒時点の値)が取得できます。