Tuesday, July 19, 2011

Ontario Public Holiday Program


Lparameters pDate
Private xY, xC, xN, xK, xI
Private xJ, xM, xD, xHoliday


xHoliday = ''
Do Case
  Case Month(pDate) =  1 And ;
       Day(pDate)   =  1
    xHoliday = "New year's day"

  Case Month(pDate) =  1 And ;
       Day(pDate)   =  2 And ;
       Dow(pDate)   =  2
    xHoliday = "Monday after new year"

  Case Month(pDate) =  2 And ;
       Dow(pDate)   =  2 And ;
       Day(pDate)   > 14 And ;
       Day(pDate)   < 22
    xHoliday = "Family Day"

  Case Month(pDate) =  5 And ;
       DOW(pDate)   =  2 And ;
       DAY(pDate)   > 21 And ;
       DAY(pDate)   < 29
    xHoliday = 'Victoria Day'

  Case Month(pDate) =  7 And ;
       Day(pDate)   =  1
    xHoliday = 'Canada Day'

  Case Month(pDate) =  7 And ;
       Day(pDate)   =  2 And ;
       Dow(pDate)   =  2
    xHoliday = 'Monday after Canada Day'

  Case Month(pDate) =  8 And ;
       Dow(pDate)   =  2 And ;
       Day(pDate)   <  8
    xHoliday = 'Civil Holiday'

  Case Month(pDate) =  9 And ;
       Dow(pDate)   =  2 And ;
       Day(pDate)   <  8
    xHoliday = 'Labour Day'

  Case Month(pDate) = 10 And ;
       Dow(pDate)   =  2 And ;
       Day(pDate)   >  7 And ;
       Day(pDate)   < 15
    xHoliday = 'Thanksgiving'

  Case Month(pDate) = 12 And ;
       Day(pDate)   = 25
    xHoliday = 'Christmas Day'

  Case Month(pDate) = 12 And ;
       Day(pDate)   = 26
    xHoliday = 'Boxing Day'

  Case Month(pDate) = 12 And ;
       Day(pDate)   = 27 And ;
       Dow(pDate)   = 2
    xHoliday = 'Monday after Christmas'

  Case Month(pDate) = 12 And ;
       Day(pDate)   = 28 And ;
       Dow(pDate)   = 2
    xHoliday = 'Monday after Christmas'

  Case Month(pDate) = 12 And ;
       Day(pDate)   = 27 And ;
       Dow(pDate)   = 3
    xHoliday = 'Tuesday after Christmas'

  Case Month(pDate) = 12 And ;
       Day(pDate)   = 28 And ;
       Dow(pDate)   = 3
    xHoliday = 'Tuesday after Christmas'

  Otherwise
    xY = Year(pDate)
    xC = Int(xY / 100)
    xN = xY - 19 * Int(xY / 19)
    xK = Int((xC - 17) / 25)
    xI = xC - Int(xC / 4) - ;
         Int((xC - xK) / 3) + 19 * xN + 15
    xI = xI - 30 * Int(xI / 30)
    xI = xI - Int(xI / 28) * (1 - Int(xI / 28) * ;
         Int(28 / (xI + 1)) * Int((21 - xN) / 11))
    xJ = xY + Int(xY / 4) + xI + 2 - xC + Int(xC / 4)
    xJ = xJ - 7 * Int(xJ / 7)
    xL = xI - xJ
    xM = 3 + Int((xL + 40) / 44)
    xD = xL + 28 - 31 * Int(xM / 4)
 
    Do Case
      Case pDate = Date(xY, xM, xD) - 2
        xHoliday = 'Good Friday'

      Case pDate = Date(xY, xM, xD) + 1
        xHoliday = 'Easter Monday'

      Case Dow(pDate) = 1
        xHoliday = 'Sunday'

      Case Dow(pDate) = 7
        xHoliday = 'Saturday'

    Endcase
Endcase
Return xHoliday


No comments:

Post a Comment