Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Determine if a given DateTime is a member of a DateTime::Set

by fglock (Vicar)
on May 15, 2013 at 09:27 UTC ( #1033647=note: print w/ replies, xml ) Need Help??


in reply to Determine if a given DateTime is a member of a DateTime::Set

The problem is in the truncate('to' => 'day') step. What you need is to truncate to "14th day", which is not that easy.

Do you think you can do with DateTime::Event::Recurrence or DateTime::Event::ICal? These modules provide a large set of recurrence modes.

#!/usr/bin/perl use strict; use warnings; use DateTime::Event::Recurrence; print "DateTime::Event::Recurrence: ", $/; my $start = DateTime->today(); my $biweekly = DateTime::Event::Recurrence->daily( interval => 14, start => $start, ); print 'TESTING whether Date is in set...', $/; my $date = DateTime->today(); print $biweekly->contains($date), ' ', $date->ymd, $/; $date->add('days' => 7); print $biweekly->contains($date), ' ', $date->ymd, $/; $date->add('days' => 7); print $biweekly->contains($date), ' ', $date->ymd, $/; $date->add('days' => 7); print $biweekly->contains($date), ' ', $date->ymd, $/; $date->add('days' => 7); print $biweekly->contains($date), ' ', $date->ymd, $/; $date->add('days' => 7); print $biweekly->contains($date), ' ', $date->ymd, $/;
output:
DateTime::Event::Recurrence: TESTING whether Date is in set... 1 2013-05-15 0 2013-05-22 1 2013-05-29 0 2013-06-05 1 2013-06-12 0 2013-06-19


Comment on Re: Determine if a given DateTime is a member of a DateTime::Set
Select or Download Code
Re^2: Determine if a given DateTime is a member of a DateTime::Set
by vagabonding electron (Hermit) on May 15, 2013 at 16:36 UTC

      DateTime::Set is fine to use, but calendar math has these mysterious details, and recurrence specifications are particularly hard.

      The specialised "DateTime::Event" subclasses can make life easier. DateTime::Event::Sunrise and DateTime::Event::Cron are other nice examples.

      About the endpoint that makes it work: when both endpoints of the set are known, it triggers an optimisation that pre-calculates the whole set. The internal representation then changes to a list. This "fixes" the problem, because no further recurrence math is involved.

        Thank you for your time and of course for the modules (I should mention this earlier).

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1033647]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (12)
As of 2014-07-23 07:16 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (136 votes), past polls