use POSIX qw( floor strftime ); my $monthsback = 3; # 0=this month -1=last, -2, ... my ($day,$mon,$year) = (localtime())[3,4,5]; $mon -= $monthsback; $year += floor($mon / 12); $mon = $mon % 12; print(strftime("%Y-%m", 0,0,0, $day,$mon,$year), "\n");