Lines 317-348
sub days_between {
Link Here
|
317 |
my $start_dt = shift; |
317 |
my $start_dt = shift; |
318 |
my $end_dt = shift; |
318 |
my $end_dt = shift; |
319 |
|
319 |
|
320 |
if ( $start_dt->compare($end_dt) > 0 ) { |
320 |
# Change time zone for date math and swap if needed |
321 |
# swap dates |
321 |
$start_dt = $start_dt->clone->set_time_zone('floating'); |
322 |
my $int_dt = $end_dt; |
322 |
$end_dt = $end_dt->clone->set_time_zone('floating'); |
323 |
$end_dt = $start_dt; |
323 |
if( $start_dt->compare($end_dt) > 0 ) { |
324 |
$start_dt = $int_dt; |
324 |
( $start_dt, $end_dt ) = ( $end_dt, $start_dt ); |
325 |
} |
325 |
} |
326 |
|
326 |
|
327 |
|
|
|
328 |
# start and end should not be closed days |
327 |
# start and end should not be closed days |
329 |
my $days = $start_dt->delta_days($end_dt)->delta_days; |
328 |
my $days = $start_dt->delta_days($end_dt)->delta_days; |
330 |
for (my $dt = $start_dt->clone()->set_time_zone('floating'); |
329 |
while( $start_dt->compare($end_dt) < 1 ) { |
331 |
$dt <= $end_dt; |
330 |
$days-- if $self->is_holiday($start_dt); |
332 |
$dt->add(days => 1) |
331 |
$start_dt->add( days => 1 ); |
333 |
) { |
|
|
334 |
if ($self->is_holiday($dt)) { |
335 |
$days--; |
336 |
} |
337 |
} |
332 |
} |
338 |
return DateTime::Duration->new( days => $days ); |
333 |
return DateTime::Duration->new( days => $days ); |
339 |
|
|
|
340 |
} |
334 |
} |
341 |
|
335 |
|
342 |
sub hours_between { |
336 |
sub hours_between { |
343 |
my ($self, $start_date, $end_date) = @_; |
337 |
my ($self, $start_date, $end_date) = @_; |
344 |
my $start_dt = $start_date->clone(); |
338 |
my $start_dt = $start_date->clone()->set_time_zone('floating'); |
345 |
my $end_dt = $end_date->clone(); |
339 |
my $end_dt = $end_date->clone()->set_time_zone('floating'); |
346 |
my $duration = $end_dt->delta_ms($start_dt); |
340 |
my $duration = $end_dt->delta_ms($start_dt); |
347 |
$start_dt->truncate( to => 'day' ); |
341 |
$start_dt->truncate( to => 'day' ); |
348 |
$end_dt->truncate( to => 'day' ); |
342 |
$end_dt->truncate( to => 'day' ); |
Lines 351-357
sub hours_between {
Link Here
|
351 |
# take into account open/close times then it would be a duration |
345 |
# take into account open/close times then it would be a duration |
352 |
# of library open hours |
346 |
# of library open hours |
353 |
my $skipped_days = 0; |
347 |
my $skipped_days = 0; |
354 |
for (my $dt = $start_dt->clone()->set_time_zone('floating'); |
348 |
for (my $dt = $start_dt->clone(); |
355 |
$dt <= $end_dt; |
349 |
$dt <= $end_dt; |
356 |
$dt->add(days => 1) |
350 |
$dt->add(days => 1) |
357 |
) { |
351 |
) { |