Problems? Is your data what you think it is? PerlMonks

### Re^2: Check if Date interval contains Hour X

by ikegami (Pope)
 on Jul 23, 2009 at 19:21 UTC ( #782766=note: print w/replies, xml ) Need Help??

in reply to Re: Check if Date interval contains Hour X
in thread Check if Date interval contains Hour X

I thought you were on to something until I realized the real problem is finding the right date to go with the hour. Using ::Span makes things a lot more complicated since you now need to make 4 DateTime objects for every hour.
• Comment on Re^2: Check if Date interval contains Hour X

Replies are listed 'Best First'.
Re^3: Check if Date interval contains Hour X
by alexm (Chaplain) on Jul 23, 2009 at 20:08 UTC

The very first thing that came to my mind after reading the OP was the method DateTime::Span::contains. However, yours is the right approach since that method only works for sets that are fully inside, as the manual says.

Thanks!

contains wouldn't work, but intersects would
```...| 20 | 21 | 22 | 23 | 00 | 01 | 02 | 03 |...
(------------)     log
(----]   hour
(--)     intersection

You're right again, I just realized a bit later so I've been playing with intersects:

```sub hour_in_range {
my (\$dt_s, \$dt_e, @hours) = @_;

my \$dt_span = DateTime::Span->from_datetimes(
start => \$dt_s, end => \$dt_e
);

for my \$hour (@hours) {
my \$dt = \$dt_s->clone()
->truncate( to => 'day' )

\$dt->add( days => 1 ) if \$dt < \$dt_s;

my \$hour_span = DateTime::Span->from_datetimes(
start => \$dt, end => \$dt
);

return 1 if \$dt_span->intersects(\$hour_span);
}

return 0;
}

It's not as simple and efficient as your approach, but it shows how to use span intersection.

OTOH, I misunderstood the OP and was thinking that @hours = (1,11) was an interval (1am to 11am), not a list of hours to match.

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

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (2)
As of 2018-07-18 03:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?

Results (383 votes). Check out past polls.

Notices?