use DateTime 0.10; my $today = DateTime->now(); warn $today->time_zone_short_name(); warn $today->datetime(); $today->subtract( months => 1 ); # or $today->subtract_duration( DateTime::Duration->new( months => 1 ) ); warn $today->datetime(); my $dt = DateTime->last_day_of_month( year => $today->year, month => $today->month, ); die $dt->datetime(); __END__ UTC at soy.pl line 4. 2003-04-28T11:17:32 at soy.pl line 5. 2003-03-28T11:17:32 at soy.pl line 11. 2003-03-31T00:00:00 at soy.pl line 18.