#!/usr/bin/perl use strict; use warnings; use DateTime; use DateTime::Set; my $start = DateTime->today(); my $end = DateTime->today()->add('days' => 90); my $biweekly = DateTime::Set->from_recurrence( 'recurrence' => sub { return $_[0]->add('days' => 14)->truncate('to' => 'day') }, 'start' => $start, 'end' => $end, # !!! This is critical. ); my $iter = $biweekly->iterator; print "This is the set with defined 'end': ", $/; while ( my $dt = $iter->next ) { print $dt->datetime, $/; }; print $/; 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, $/; print $/; print "This is the begin of the set with 'end' commented out: ", $/; $biweekly = DateTime::Set->from_recurrence( 'recurrence' => sub { return $_[0]->add('days' => 14)->truncate('to' => 'day') }, 'start' => $start, # 'end' => $end, # !!! This is critical. ); $iter = $biweekly->iterator; while ( my $dt = $iter->next ) { last if $dt > $end; # to avoid the infinite loop. print $dt->datetime, $/; }; print $/; print 'TESTING whether Date is in set...', $/; $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, $/; #### C:\Perl\bin>perl N:\Perle\Learn\DateTime\pm_1033231_orig_analyse_003_h.pl This is the set with defined 'end': 2013-05-14T00:00:00 2013-05-28T00:00:00 2013-06-11T00:00:00 2013-06-25T00:00:00 2013-07-09T00:00:00 2013-07-23T00:00:00 2013-08-06T00:00:00 TESTING whether Date is in set... 1 2013-05-14 0 2013-05-21 1 2013-05-28 0 2013-06-04 1 2013-06-11 0 2013-06-18 This is the begin of the set with 'end' commented out: 2013-05-14T00:00:00 2013-05-28T00:00:00 2013-06-11T00:00:00 2013-06-25T00:00:00 2013-07-09T00:00:00 2013-07-23T00:00:00 2013-08-06T00:00:00 TESTING whether Date is in set... 1 2013-05-14 1 2013-05-21 1 2013-05-28 1 2013-06-04 1 2013-06-11 1 2013-06-18