http://www.perlmonks.org?node_id=1000925


in reply to Determining if I have a particular Friday off

There is a bug in your code.

You assume that every year has 52 weeks. In fact, some are deemed to have have 53:

Try this:

D:\perl>junk.pl 2010 1 1 You DID have Fri 1-Jan-2010 off. D:\perl>junk.pl 2010 1 8 You DID have Fri 8-Jan-2010 off.

Replies are listed 'Best First'.
Re^2: Determining if I have a particular Friday off
by thmsdrew (Scribe) on Nov 06, 2012 at 14:55 UTC

    Hey, been busy lately but I finally addressed the problem you pointed out as follows:

    #!/usr/bin/perl use strict; use warnings; use Date::Calc qw(check_date Add_Delta_Days Monday_of_Week Week_of_Yea +r Compress Today Date_to_Text Weeks_in_Year); if (check_date(@ARGV)) { # If there are 52 weeks in the year, I have odd Fridays off. # If there are 53, I have even Fridays off. my $mod = (Weeks_in_Year($ARGV[1]) eq 52) ? 2 : 1; my @friday = Add_Delta_Days(Monday_of_Week(Week_of_Year(@ARGV)), 4 +); my ($week, $year) = Week_of_Year(@friday); my $present = Compress(@friday) > Compress(Today()); printf "You %s have %s off.\n", ($present ? "DO" : "DID") . ($week % $mod ? "" : "N'T"), Date_to_Text(@friday); } else { print "Usage.\n"; }
      my $mod = (Weeks_in_Year($ARGV[1]) eq 52) ? 2 : 1; ... ($present ? "DO" : "DID") . ($week % $mod ? "" : "N'T")

      Hmmm. When $mod is 1, % is always zero - and you "DON'T/DIDN'T" have off.

        Hmm yeah, I wasn't thinking. This is a weird case, I'll have to think more about it.