Skip to content

Instantly share code, notes, and snippets.

@kyanny
Created April 1, 2009 09:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kyanny/88616 to your computer and use it in GitHub Desktop.
Save kyanny/88616 to your computer and use it in GitHub Desktop.
#!/usr/bin/perl
use strict;
use warnings;
use DateTime;
use DateTime::Set;
use DateTime::Span;
use Data::Dumper;
my $d1 = DateTime->new(year => 2009, month => 2, day => 27);
my $d2 = DateTime->new(year => 2009, month => 4, day => 1);
my $span = DateTime::Span->from_datetimes(start => $d1, end => $d2);
# recurrence
my $days = DateTime::Set->from_recurrence(
span => $span,
recurrence => sub {
return $_[0]->truncate(to => 'day')->add(days => 1)
},
);
warn $days;
warn $days->min;
warn $days->max;
warn '='x80;
# iterator
my $iter = $days->iterator;
while (my $d = $iter->next) {
warn $d->ymd;
}
warn '='x80;
# as_list
my @dt = $days->as_list;
warn $_->ymd for @dt;
warn '='x80;
# map
my $set1 = $days->map(
sub {
return $_->add(days => 99);
}
);
warn $_->ymd for $set1->as_list;
warn '='x80;
my $set2 = $days->grep(
sub {
return ($_->day % 2) != 0;
}
);
warn $_->ymd for $set2->as_list;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment