|
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 |
) { |