http://qs321.pair.com?node_id=705178


in reply to What is the best way to get a list of all Mondays until the end of the year?

What is the best way...

Perhaps something using Date::Calc. The idea would be to take a date in the year, find the next monday, and if the year is the same, print it out. Then, keep adding 7 days until the year changes.

#! /usr/bin/perl use strict; use warnings; use Date::Calc 'Add_Delta_Days'; my ($day, $month, $year, $dow) = (localtime)[3, 4, 5, 6]; $year += 1900; $month += 1; my $this_year = $year; ($year, $month, $day) = Add_Delta_Days($year, $month, $day, (8 - $dow) + % 7); while ($this_year == $year) { printf "%04d-%02d-%02d\n", $year, $month, $day; ($year, $month, $day) = Add_Delta_Days($year, $month, $day, 7); }

update: it occurs to me that it may not be obvious how this calculates Mondays, since it uses a magic number. It would be a little clearer had I written:

my %day = qw( Sun 0 Mon 1 Tue 2 Wed 3 Thu 4 Fri 5 Sat 6 ); ($year, $month, $day) = Add_Delta_Days($year, $month, $day, (7 + $day{ +Mon} - $dow) % 7);

• another intruder with the mooring in the heart of the Perl