use warnings; use strict; use DateTime; my $year = 2017; my $dt = DateTime->new(year=>$year)->truncate(to=>'week'); print "_"x24," $year ","_"x24,"\n"; my $dt1 = $dt->clone; print "Week "; for (1..7) { print " ",$dt1->day_abbr; $dt1->add(days=>1); } print "\n"; my $prevmonth=0; for (1..54) { # weeks my $weekno = $dt->week_number; printf "%4d ", $weekno; my %names; for (1..7) { # days in the week die unless $dt->week_number==$weekno; printf " %3s %02d", $prevmonth==$dt->month?'':$dt->month_abbr, $dt->day; $names{$dt->month_abbr." Week ".($dt->week_of_month+1)}++; $prevmonth=$dt->month; $dt->add(days=>1); } print " (".join(', ',sort keys %names),")\n"; }