### Re^3: Determine if a given DateTime is a member of a DateTime::Set

by vagabonding electron (Chaplain)
 on May 14, 2013 at 16:07 UTC ( #1033519=note: print w/replies, xml ) Need Help??

I dare come again out of the wood...

It seems that it is important that a DateTime::Set has both start and end point.

Here is my today's attempt with and without an end point and the output below is different (correct if end point is defined):

#!/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, \$/;
[download]

The output:

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

[download]

Replies are listed 'Best First'.
Re^4: Determine if a given DateTime is a member of a DateTime::Set
by Athanasius (Chancellor) on May 15, 2013 at 02:33 UTC

Bravo! and ++vagabonding electron (when Vote Fairy next visits) for persevering and finding a way to make this work.

But, for the record, this is what the DateTime::Set documentation says:

The second type of set that it can handle is one based on a recurrence.... This type of set can have fixed starting and ending datetimes, but neither is required.

(Emphasis added.) So, at the very least we’ll have to say that this module is not working as advertised. :-(

 Athanasius <°(((>< contra mundum Iustus alius egestas vitae, eros Piratica,

Thank you Athanasius I was very pleased to hear that (I mean the first word :-) ).

Create A New User
Node Status?
node history
Node Type: note [id://1033519]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (4)
As of 2018-01-21 23:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
How did you see in the new year?

Results (230 votes). Check out past polls.

Notices?