Business Hours help please

Hi ;

Can anyone help me with the code of how to determine the Business Hours
between 2 dates:
What I got :
my $hours = Business::Hours->new();
$hours->business_hours(
0 => { Name => ‘Sunday’, Start => undef, End => undef },
1 => { Name => ‘Monday’, Start => ‘09:00’, End => ‘17:30’ },
2 => { Name => ‘Tuesday’, Start => ‘09:00’, End => ‘17:30’ },
3 => { Name => ‘Wednesday’, Start => ‘09:00’, End => ‘17:30’ },
4 => { Name => ‘Thursday’, Start => ‘09:00’, End => ‘17:30’ },
5 => { Name => ‘Friday’, Start => ‘09:00’, End => ‘17:30’ },
6 => { Name => ‘Saturday’, Start => undef, End => undef }
);
my $wtime = $hours->for_timespan(Start => time(), End => time()+(86400*7));
my $splosh = Dumper($wtime) ;

print “$splosh nnn\n”;

I get :
$VAR1 = bless( {
‘negInf’ => 0,
‘edges’ => [
1196774745,
1196789399,
1196845199,
1196875799,
1196931599,
1196962199,
1197017999,
1197048599,
1197277199,
1197307799,
1197363599,
1197379546
],
‘posInf’ => 0,
‘empty_string’ => ‘-’
}, ‘Set::IntSpan’ );
nnn

Help please,

Thanks;
Roy

You don’t say exactly what you’re looking for as output. As noted in
the Business::Hours documentation, for_timespan returns a Set::IntSpan,
which is what you’re seeing in your dump. Just eyeballing things, it
looks like the ‘edges’ array contains Unix timestamps corresponding to
the beginnings and ends of the ranges of time between your start and end
which fall within the business hours you defined.
Set::IntSpan - Manages sets of integers - metacpan.org has more information
on working with a Set::IntSpan.

If you’re just trying to get the number of business hours that occur
within your range, Business::Hours does also have a “between” subroutine
that returns the number of business seconds between two timestamps.
(See Business::Hours - Calculate business hours in a time period - metacpan.org
for full information on Business::Hours.)

Mark Roedel
Senior Programmer / Analyst
LeTourneau University
Longview, Texas USA-----Original Message-----
From: rt-users-bounces@lists.bestpractical.com
[mailto:rt-users-bounces@lists.bestpractical.com] On Behalf Of Roy
El-Hames
Sent: Tuesday, December 04, 2007 7:27 AM
To: RT Users
Subject: [rt-users] Business Hours help please

Hi ;

Can anyone help me with the code of how to determine the Business Hours
between 2 dates:
What I got :
my $hours = Business::Hours->new();
$hours->business_hours(
0 => { Name => ‘Sunday’, Start => undef, End => undef },
1 => { Name => ‘Monday’, Start => ‘09:00’, End => ‘17:30’ },
2 => { Name => ‘Tuesday’, Start => ‘09:00’, End => ‘17:30’ },
3 => { Name => ‘Wednesday’, Start => ‘09:00’, End => ‘17:30’ },
4 => { Name => ‘Thursday’, Start => ‘09:00’, End => ‘17:30’ },
5 => { Name => ‘Friday’, Start => ‘09:00’, End => ‘17:30’ },
6 => { Name => ‘Saturday’, Start => undef, End => undef }
);
my $wtime = $hours->for_timespan(Start => time(), End =>
time()+(86400*7));
my $splosh = Dumper($wtime) ;

print “$splosh nnn\n”;

I get :
$VAR1 = bless( {
‘negInf’ => 0,
‘edges’ => [
1196774745,
1196789399,
1196845199,
1196875799,
1196931599,
1196962199,
1197017999,
1197048599,
1197277199,
1197307799,
1197363599,
1197379546
],
‘posInf’ => 0,
‘empty_string’ => '-’
}, ‘Set::IntSpan’ );
nnn

Hi Mark;

Thanks for your reply, I am looking for the business hours/ or seconds
between 2 time stamps I had a look at the cpan page before I emailed the
list but unfortuantely I either did not understand it or missing
something … I also tried the between routine and can’t figure it out,
I was hoping someone have actually used this module similar to the
calculation I need … which is basically how long in working hours did
the ticket last from open to close …

Regards;
Roy

Roedel, Mark wrote:

Hi Roy,

I needed a way to subtract business hours from a timestamp so I added my
own sub_seconds() method to the package. I’m not sure if I ever posted it
to the wiki, so here it is. Just include this code at the end of your
program and call it like you would the add_seconds() method. I sent the
code to the business::hours authors but I never heard anything back so I
guess it was not included.

For your purposes I think you would just assign the larger of the
timestamps to a Business::Hours object and then subtract the smaller
timestamp from it using this method.

Need to add this to Business::Hours so I can count backwards from due date

{ package Business::Hours;
sub sub_seconds {
### This method is hacked version of add_seconds(), written by Gene
LeDuc
my $self = shift;
my $start = shift;
my $seconds = shift;

   # the maximum time after which we stop searching for business hours
   my $MAXTIME = (30 * 24 * 60 * 60); # 30 days

   my $first;

   my $period = (24 * 60 * 60);
   my $begin = $start - $period;

   my $hours = new Set::IntSpan;
   while ($hours->empty or $self->between($hours->first, $start) <= 

$seconds) {
if ($begin <= $start - $MAXTIME) {
return -1;
}
$hours = $self->for_timespan(Start => $begin, End => $start);

     $begin -= $period;
   }

   my @elements = reverse elements $hours;
   $first = $elements[$seconds];

   return $first;

}

1; #this line is important and will help the module return a true value
}

Regards,
Gene

At 08:25 AM 12/4/2007, Roy El-Hames wrote:

Hi Mark;

Thanks for your reply, I am looking for the business hours/ or seconds
between 2 time stamps I had a look at the cpan page before I emailed the
list but unfortuantely I either did not understand it or missing something
… I also tried the between routine and can’t figure it out,
I was hoping someone have actually used this module similar to the
calculation I need … which is basically how long in working hours did the
ticket last from open to close …

Regards;
Roy

Roedel, Mark wrote:

You don’t say exactly what you’re looking for as output. As noted in
the Business::Hours documentation, for_timespan returns a Set::IntSpan,
which is what you’re seeing in your dump. Just eyeballing things, it
looks like the ‘edges’ array contains Unix timestamps corresponding to
the beginnings and ends of the ranges of time between your start and end
which fall within the business hours you defined.
Set::IntSpan - Manages sets of integers - metacpan.org has more information
on working with a Set::IntSpan.

If you’re just trying to get the number of business hours that occur
within your range, Business::Hours does also have a “between” subroutine
that returns the number of business seconds between two timestamps.
(See Business::Hours - Calculate business hours in a time period - metacpan.org
for full information on Business::Hours.)


Mark Roedel
Senior Programmer / Analyst
LeTourneau University
Longview, Texas USA

-----Original Message-----
From: rt-users-bounces@lists.bestpractical.com
[mailto:rt-users-bounces@lists.bestpractical.com] On Behalf Of Roy
El-Hames
Sent: Tuesday, December 04, 2007 7:27 AM
To: RT Users
Subject: [rt-users] Business Hours help please

Hi ;

Can anyone help me with the code of how to determine the Business Hours
between 2 dates:
What I got :
my $hours = Business::Hours->new();
$hours->business_hours(
0 => { Name => ‘Sunday’, Start => undef, End => undef },
1 => { Name => ‘Monday’, Start => ‘09:00’, End => ‘17:30’ },
2 => { Name => ‘Tuesday’, Start => ‘09:00’, End => ‘17:30’ },
3 => { Name => ‘Wednesday’, Start => ‘09:00’, End => ‘17:30’ },
4 => { Name => ‘Thursday’, Start => ‘09:00’, End => ‘17:30’ },
5 => { Name => ‘Friday’, Start => ‘09:00’, End => ‘17:30’ },
6 => { Name => ‘Saturday’, Start => undef, End => undef }
);
my $wtime = $hours->for_timespan(Start => time(), End =>
time()+(86400*7));
my $splosh = Dumper($wtime) ;

print “$splosh nnn\n”;

I get :
$VAR1 = bless( {
‘negInf’ => 0,
‘edges’ => [
1196774745,
1196789399,
1196845199,
1196875799,
1196931599,
1196962199,
1197017999,
1197048599,
1197277199,
1197307799,
1197363599,
1197379546
],
‘posInf’ => 0,
‘empty_string’ => '-’
}, ‘Set::IntSpan’ );
nnn


The rt-users Archives

SAVE THOUSANDS OF DOLLARS ON RT SUPPORT:

If you sign up for a new RT support contract before December 31, we’ll take
up to 20 percent off the price. This sale won’t last long, so get in touch
today. Email us at sales@bestpractical.com or call us at +1 617 812 0745.

Community help: http://wiki.bestpractical.com
Commercial support: sales@bestpractical.com

Discover RT’s hidden secrets with RT Essentials from O’Reilly Media. Buy a
copy at http://rtbook.bestpractical.com

Gene LeDuc, GSEC
Security Analyst
San Diego State University

Thanks Gene , I did not spot this yesterday, I 'll give it a try,
Regards;
Roy

Gene LeDuc wrote: