On Apr 16, 9:40*am, Al <A...@discussions.microsoft.comwrote:

Thnks to every one. I will try this and get back

"Al" wrote:
I am working in vb2005. how can I calculate business days (not including

holidays and weekends) between 2 dates? thanks

Al- Hide quoted text -

- Show quoted text -

I am not sure if this will help you but, I created this program in

1991 using the "Natral Adabas language" on a mainframe computer. This

was written as a callable subroutine, I think even if you do not know

the NATURAL language you can figure out what this program does. The

holdiays are the State of Washington holdiays

0020 ** PROGRAM : NXTWKDAY COMPUTES NEXT WORKING DAY.

0030 ** WRITTEN BY: R NESBITT

0040 ** CREATED : MAY OF 1991

0050 **

0060 ** COMPUTES THE FOLLOWING HOLIDAYS . . .

0070 ** NEW YEARS DAY = JAN 1

0080 ** MARTIN LUTHER KINGS B-DAY = 3RD MONDAY IN JAN

0090 ** PRESIDENTS DAY = 3RD MONDAY IN FEB

0100 ** MEMORIAL DAY = LAST MONDY IN MAY

0110 ** INDEPENDENCE DAY = 4TH OF JULY

0120 ** LABOR DAY = 1ST MONDAY IN SEPTEMBER

0130 ** VETERANS DAY = 11TH OF NOV

0140 ** THANKSGIVING = 4TH THURSDAY AND FRIDAY IN NOV

0150 ** CHRISTMAS = 25TH OF DEC

0160 **

0170 ** IF A HOLIDAY FALLS ON A SATURDAY THEN THE HOLIDAY IS FRIDAY.

0180 ** IF A HOLIDAY FALLS ON A SUNDAY THEN THE HOLIDAY IS MONDAY.

0190 **

0200 **

0620 **

0630 DEFINE DATA PARAMETER

0640 1 #NEXT-WRK-DAY (D)

0650 LOCAL

0660 1 #INPUT-DATE (D)

0670 1 #NEXT-DAY (D)

0680 1 #DAYOWK (A2)

0690 1 #WRK-MONTH (A2)

0700 1 #WRK-DAY (A2)

0710 1 #THURSDAY (A2)

0720 1 #FRIDAY (A2)

0730 1 #SATURDAY (A2)

0740 1 #SUNDAY (A2)

0750 1 #MONDAY (A2)

0760 END-DEFINE

0770 *

0780 * THIS MOVES THE FIRST TWO CHARACTERS TO THE DAY IN UPPER LOWER

CASE

0790 *

0800 MOVE H'E388' TO #THURSDAY /* Th

0810 MOVE H'C699' TO #FRIDAY /* Fr

0820 MOVE H'E281' TO #SATURDAY /* Sa

0830 MOVE H'E2A4' TO #SUNDAY /* Su

0840 MOVE H'D496' TO #MONDAY /* Mo

0850 *

0860 IF #NEXT-WRK-DAY GT 0

0870 DO

0880 MOVE #NEXT-WRK-DAY TO #INPUT-DATE

0990 DOEND /* (0870)

1000 ELSE

1010 MOVE *DATX TO #INPUT-DATE

1020 *

1030 COMPUTE #NEXT-DAY = #INPUT-DATE + 1

1040 *

1050 MOVE EDITED #NEXT-DAY (EM=NN) TO #DAYOWK

1060 MOVE EDITED #NEXT-DAY (EM=MM) TO #WRK-MONTH

1070 *

1080 DECIDE ON FIRST VALUE OF #DAYOWK

1090 VALUE #SATURDAY

1100 COMPUTE #NEXT-WRK-DAY = #NEXT-DAY + 2

1110 VALUE #SUNDAY

1120 COMPUTE #NEXT-WRK-DAY = #NEXT-DAY + 1

1130 NONE

1140 MOVE #NEXT-DAY TO #NEXT-WRK-DAY

1150 END-DECIDE /* (1080)

1160 *

1170 MOVE EDITED #NEXT-WRK-DAY (EM=DD) TO #WRK-DAY

1180 MOVE EDITED #NEXT-WRK-DAY (EM=NN) TO #DAYOWK

1190 MOVE EDITED #NEXT-WRK-DAY (EM=MM) TO #WRK-MONTH

1200 DECIDE ON FIRST VALUE OF #WRK-MONTH

1210 VALUE '01'

1220 PERFORM COMPUTE-JAN

1230 VALUE '02'

1240 IF #WRK-DAY = MASK(15-21) AND #DAYOWK = #MONDAY /*PRES DAY

*/

1250 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 1

1260 VALUE '05'

1270 IF #WRK-DAY = MASK(25-31) AND #DAYOWK = #MONDAY /*MEMORIAL

DAY*/

1280 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 1

1290 VALUE '07'

1300 PERFORM COMPUTE-JUL

1310 VALUE '09'

1320 IF #WRK-DAY = MASK(01-07) AND #DAYOWK = #MONDAY /*LABOR

DAY*/

1330 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 1

1340 VALUE '11'

1350 PERFORM COMPUTE-NOV

1360 VALUE '12'

1370 PERFORM COMPUTE-DEC

1380 NONE

1390 IGNORE

1400 END-DECIDE /* (1200)

1410 *

1420 *****************************

1430 DEFINE SUBROUTINE COMPUTE-JAN

1440 *****************************

1450 *

1460 IF #WRK-DAY = MASK(01-02) /**** NEW YEARS DAY ****/

1470 DO

1480 DECIDE ON FIRST VALUE #DAYOWK

1490 VALUE #FRIDAY

1500 IF #WRK-DAY = MASK(01-01)

1510 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 3

1520 VALUE #MONDAY

1530 IF #WRK-DAY = MASK(01-02)

1540 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 1

1550 NONE

1560 IF #WRK-DAY = '01'

1570 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 1

1580 END-DECIDE /* (1480)

1590 DOEND /* (1470)

1600 *

1610 ELSE /**** MLK JR BIRTHDAY ****/

1620 IF #WRK-DAY = MASK(15-21) AND #DAYOWK = #MONDAY

1630 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 1

1640 RETURN /* (1430)

1650 *****************************

1660 DEFINE SUBROUTINE COMPUTE-JUL

1670 *****************************

1680 *

1690 IF #WRK-DAY = MASK(03-06) /**** INDEPENDENCE DAY ****/

1700 DO

1710 DECIDE ON FIRST VALUE #DAYOWK

1720 VALUE #FRIDAY

1730 IF #WRK-DAY = MASK(03-04)

1740 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 3

1750 VALUE #MONDAY

1760 IF #WRK-DAY = MASK(04-05)

1770 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 1

1780 NONE

1790 IF #WRK-DAY = '04'

1800 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 1

1810 END-DECIDE /* (1710)

1820 DOEND /* (1700)

1830 *

1840 RETURN /* (1660)

1850 *****************************

1860 DEFINE SUBROUTINE COMPUTE-NOV

1870 *****************************

1880 *

1890 IF #WRK-DAY = MASK(10-13) /**** VETERANS DAY ****/

1900 DO

1910 DECIDE ON FIRST VALUE #DAYOWK

1920 VALUE #FRIDAY

1930 IF #WRK-DAY = MASK(10-11)

1940 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 3

1950 VALUE #MONDAY

1960 IF #WRK-DAY = MASK(11-12)

1970 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 1

1980 NONE

1990 IF #WRK-DAY = '11'

2000 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 1

2010 END-DECIDE /* (1910)

2020 DOEND /* (1900)

2030 ELSE /* (1890)

2040 IF #WRK-DAY = MASK(22-28) /*** THANKSGIVING HOLIDAYS ***/

2050 DO

2060 DECIDE ON FIRST VALUE #DAYOWK

2070 VALUE #THURSDAY

2080 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 4

2090 VALUE #FRIDAY

2100 IF #WRK-DAY NE '22'

2110 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 3

2120 NONE

2130 IGNORE

2140 END-DECIDE /* (2060)

2150 DOEND /* (2050)

2160 ELSE

2170 IF #WRK-DAY = '29' AND #DAYOWK = #FRIDAY

2180 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 3

2190 *

2200 RETURN /* (1860)

2210 *****************************

2220 DEFINE SUBROUTINE COMPUTE-DEC

2230 *****************************

2240 *

2250 IF #WRK-DAY = MASK(24-27) /**** CHRISTMAS DAY ****/

2260 DO

2270 DECIDE ON FIRST VALUE #DAYOWK

2280 VALUE #FRIDAY

2290 IF #WRK-DAY = MASK(24-25)

2300 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 3

2310 VALUE #MONDAY

2320 IF #WRK-DAY = MASK(25-26)

2330 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 1

2340 NONE

2350 IF #WRK-DAY = '25'

2360 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 1

2370 END-DECIDE /* (2270)

2380 DOEND /* (2260)

2390 ELSE /* (2250)

2400 IF #WRK-DAY = '31' AND #DAYOWK = #FRIDAY /* NEW YEARS HOLIDAY

****/

2410 COMPUTE #NEXT-WRK-DAY = #NEXT-WRK-DAY + 3

2420 *

2430 RETURN /* (2220)

2440 END