in reply to Re^4: Date::Manip Sunday Holidays
in thread Date::Manip Sunday Holidays

Excellent, the solution right from the author. Thanks, SBECK!

Replies are listed 'Best First'.
Re^6: Date::Manip Sunday Holidays
by SBECK (Chaplain) on Nov 29, 2015 at 03:49 UTC

    Unfortunately, it appears that I didn't get the right answer. Going back and rereading it (more carefully this time around), the desired date of New Years is:

    1/1 if 1/1 is Mon-Fri OR Sat 1/2 if 1/1 is Sun

    That's much more complicated. I found something that I thought would work...

    1*1:0:1:0:0:0*NBD,BD1,IBD,FD1 = New Year's Day (Saturday) 1*1:0:1:0:0:0*NBD,BD1,NBD,FD2 = New Year's Day (Sunday observed Mon +day) 1*1:0:1:0:0:0*IBD = New Year's Day (real)

    but it is failing on some years. I actually think it might be a bug. I'll check into it tomorrow.

    I have definitely decided that I need to add a couple more modifiers similar to IBD and NBD which will check if it is a given day of the week. That would make this much simpler. I hadn't been aware of the complexity of the holiday definition used here.

      There was definitely a bug. I fixed it today and it will be in the next release (originally scheduled for tomorrow 12/1, but it will probably get pushed back a day or two to allow me to complete the work to get this working).

      In the next release (6.52 which should be released tomorrow after a bit more testing), you will be able to define New Years the way you are asking in a couple of ways:

      # Saturday 1*1:0:1:0:0:0*NBD,BD1,IBD,FD1 = New Year's Day # Sunday (observed Monday) 1*1:0:1:0:0:0*NBD,BD1,NBD,FD2 = New Year's Day # M-F 1*1:0:1:0:0:0*IBD = New Year's Day

      or

      # Saturday 1*1:0:1:0:0:0*IW6 = New Year's Day # Sunday (observed Monday) 1*1:0:1:0:0:0*IW7,FD1 = New Year's Day # M-F 1*1:0:1:0:0:0*IBD = New Year's Day

      It's important to name the holiday the same for all definitions.

        ...And since I have the ear of "The Man", just a thought: the ability to input a hash or array of holidays would be powerful. Maybe through the constructor or a routine parameter? Say for example, if I want to keep a table of holidays in my sql db, then they could be maintained by a user through a web interface instead of an admin in a config file. Then I could query the db and input those days into the date object. Not that I spend waaaaay too much time thinking about holidays or anything.

        Unless of course this functionality already exists and I missed it somewhere in the documentation dispite studying it for hours. If that's the case, then nevermind.

        Simply beautiful.

        Do you know how many YEARS this has plagued me? Now I can set it once and never touch it again. Since every single date routine I do involves holiday handling, this is the primary reason I use this module for everything. Thank you!

        I was able to update the package on my Linux boxes and it's working perfectly. However, my Win2012 64bit ActiveState v5.20 ppm is only showing the latest available for Date::Manip is v6.50. Repository is set to http://ppm4.activestate.com/MSWin32-x64/5.20/2000/package.db.gz and showing a last check datetime of 12/2/2015 @ 13:11. Looking at the ActiveState, it's showing latest release is 6.52, but only 6.51 in the table.

        Any idea how long until it's ready for ppm?

        Sorry, I feel like I finally got my red rider bb gun for Christmas.