#!/usr/bin/perl use strict; use warnings; use DateTime::Format::Strptime; use Datetime::Set; my $strp = DateTime::Format::Strptime->new( pattern => '%Y-%m-%d %T', ); my $datf = qq{2012-01-01 04:00:00}; my $datt = qq{2012-01-02 23:00:00}; my $start = $strp->parse_datetime($datf); my $end = $strp->parse_datetime($datt); my $iter; my $set = DateTime::Set->from_recurrence( after => $start, before => $end, recurrence => sub { return $_[0]->add( hours => 1 )->truncate( to => 'hour' ) }, ); my $datf_plus = $start->add( hours => 10 ); my $set_2 = DateTime::Set->from_datetimes( dates => [ $datf_plus ] ); if ( $set->contains( $set_2 ) ) # or intersects { print "\nYes!\n"; print $set->contains( $set_2 ), "\n"; } else { print "\nNo!\n"; print $set->contains( $set_2 ), "\n"; } #### FIRST 5 ELEMENTS OF SET 2013-05-13T00:00:00 2013-05-27T00:00:00 2013-06-10T00:00:00 2013-06-24T00:00:00 2013-07-08T00:00:00 #### #!/usr/bin/perl use strict; use warnings; use DateTime::Span; my $date1 = DateTime->new( year => 2002, month => 3, day => 11 ); my $date2 = DateTime->new( year => 2002, month => 5, day => 12 ); my $span = DateTime::Span->from_datetimes( start => $date1, end => $date2 ); my @timestamps; for my $month ( 1 .. 5) { my $date_x = DateTime->new( year => 2002, month => $month, day => 22 ); push @timestamps, $date_x; } for my $timestamp ( @timestamps ) { if ( $span->contains( $timestamp ) ) { print $timestamp->datetime, ' ', $span->contains( $timestamp ), " Yes!\n"; } else { print $timestamp->datetime, ' ', $span->contains( $timestamp ), " No!\n"; } } #### 2002-01-22T00:00:00 0 No! 2002-02-22T00:00:00 0 No! 2002-03-22T00:00:00 1 Yes! 2002-04-22T00:00:00 1 Yes! 2002-05-22T00:00:00 0 No!