_________ Oct 2017 _________
Week 1: 01
Week 2: 02 03 04 05 06 07 08
Week 3: 09 10 11 12 13 14 15
Week 4: 16 17 18 19 20 21 22
Week 5: 23 24 25 26 27 28 29
Week 6: 30 31
####
use warnings;
use strict;
use DateTime;
my $year = 2017;
for my $month (1..12) {
my $dt = DateTime->new(year=>$year,month=>$month);
print "_"x9,$dt->strftime(" %b %Y "),"_"x9,"\n";
my $prevweek=-1;
while ($dt->month==$month) {
my $week = $dt->week_of_month();
print $prevweek<0?'':"\n", "Week ",$week+1,":"
if $week != $prevweek;
printf " %02d", $dt->day;
$prevweek=$week;
$dt->add(days=>1);
}
print "\n";
}
####
________________________ 2017 ________________________
Week Mon Tue Wed Thu Fri Sat Sun
52 Dec 26 27 28 29 30 31 Jan 01 (Dec Week 6, Jan Week 1)
1 02 03 04 05 06 07 08 (Jan Week 2)
2 09 10 11 12 13 14 15 (Jan Week 3)
3 16 17 18 19 20 21 22 (Jan Week 4)
4 23 24 25 26 27 28 29 (Jan Week 5)
5 30 31 Feb 01 02 03 04 05 (Feb Week 2, Jan Week 6)
...
39 25 26 27 28 29 30 Oct 01 (Oct Week 1, Sep Week 5)
40 02 03 04 05 06 07 08 (Oct Week 2)
41 09 10 11 12 13 14 15 (Oct Week 3)
42 16 17 18 19 20 21 22 (Oct Week 4)
43 23 24 25 26 27 28 29 (Oct Week 5)
44 30 31 Nov 01 02 03 04 05 (Nov Week 2, Oct Week 6)
...
####
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";
}