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


Gene LeDuc 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.
http://search.cpan.org/dist/Set-IntSpan/IntSpan.pm 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 http://search.cpan.org/dist/Business-Hours/lib/Business/Hours.pm
for full information on Business::Hours.)


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



-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] 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




_______________________________________________
http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

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 [EMAIL PROTECTED] or call us at +1 617 812 0745.


Community help: http://wiki.bestpractical.com
Commercial support: [EMAIL PROTECTED]


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



_______________________________________________
http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-users

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 [EMAIL PROTECTED] or call us at +1 617 812 0745.


Community help: http://wiki.bestpractical.com
Commercial support: [EMAIL PROTECTED]


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

Reply via email to