use Date::Manip

http://www.perldoc.com/perl5.6.1/lib/Date/Manip.html

-J

-----Original Message-----
From: Andrew Braithwaite [mailto:[EMAIL PROTECTED] 
Sent: Monday, February 24, 2003 1:33 PM
To: 'Lucas Cowgar'; MySQL Mailing List
Subject: RE: # of Business Days?

>>Can anyone out there help me with a SQL query? I need to find the number
of business days between date a and b? >>Obviously finding simply the number
of days is easy, but I have no clue how to find the number of business days.
>>TIA!

Here's some ropey perl I wrote a ages back to calculate working minutes
between two unix timestamps (based on UK bank holidays and working hours of
9 to 6).  I'm sure you could adapt to whatever you need....

Please - no-one correct me on my perl (I already know....), Don't fix what
ain't broke :)

Even so - I would reccoment some changes on a system that uses the below
heavily...

Cheers,

Andrew

###  Used to calculate working minutes between two unix timestamps
#
# $sdate = 1040807553;
# $edate = 1040809553;
#
# $result = calc_workmins($sdate, $edate);
##################################################################

sub calc_workmins {
        local ($sdate,$edate) = @_;
        $mins_total = 1;
        $rows = 0;
        while ($sdate le $edate) {
                my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime($sdate);
                $year += 1900;
                $mon  += 1; ## perl returns months in the range 0 to 11
                my ($todaysdate) = $mday . "-" . $mon . "-" . $year;
                my $bankflag = 0;
                for my $bankhol
("1-1-2002","29-3-2002","1-4-2002","3-6-2002","4-6-2002","26-8-2002","25-12-
2002","26-12-2002","1-1-2003","18-4-2003","21-4-2003","5-5-2003","26-5-2003"
,"25-8-2003","25-12-2003","26-12-2003","27-12-2003","28-12-200","31-1-2004",
"9-4-2004","12-4-2004","3-5-2004","31-5-2004","30-8-2004","25-12-2004","26-1
2-2004","27-12-2004","3-1-2005","25-3-2005","28-3-2005","2-5-2005","30-5-200
5","29-8-2005","25-12-2005","26-12-2005") {
                        if ($todaysdate == $bankhol) {
                                $bankflag = 1;
                        }
                        $bankholshow = $bankhol;
                }
                if (($hour > 8) && ($hour < 19) && ($wday > 0) && ($wday <
6) && ($bankflag < 1)) {
                        $mins_total++;
                }
                $sdate = $sdate + 60;
                $rows++;
        }
        return $mins_total;
}




---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php



---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/doc/         (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to