Without seeing your application (or an example of your application/what you are trying to accomplish), I can only offer suggestions. However, ASP can do the following:
1) We can calculate if the day is a Weekend day using 2 different functions, Weekday(date) and WeekdayName(date). Weekday returns an integer value relating to the day of the week. WeekdayName returns in short or long format the name of the day.
See here for more information:
2) As to the Public Holiday additions: You know what the public holidays will be AND assuming that you have 8 hour work days, all you need to do is a simple comparison of the startdate, enddate, and holiday:
dHoliday = DateValue(holiday) 'make sure the information is in date format
dStartDate = DateValue(startdate) 'make sure the information is in date format
dEndDate = DateValue(enddate) 'make sure the information is in date format
If dHoliday >= dStartDate <= dEndDate then
hoursWorked = cInt(hoursWorked)-8
DateValue() puts a value into a date. This is one way to make sure that the date is valid. You can also use IsDate().
The If...End If statement says If the date of the holiday is between the start date and the end date, then remove 8 hours from your [convert-to-Integer (cInt)] number of hours worked.
THIS IS NOT TESTED AND MAY NEED SOME TWEAKING BASED ON YOUR APPLICATION.
However, it is a starting point.