This code will help you to calculate the date of Thanksgiving for the current system year.
Code
H NoMain
*,Procedure Prototype
D ThanksGiving PR D
P ThanksGiving B Export
*,Procedure Interface
D ThanksGiving PI D
D DayOfWeek S 2 0
D YrsPassed S 4 0
D Nov1 S D datfmt(*ISO)
D ISO_Today S D datfmt(*ISO)
D Thanksgiving S D datfmt(*ISO)
D SatDay S D datfmt(*ISO) inz(D'2003-10-04')
*,Make variable Nov1 the first day of November for the current year
C Time ISO_Today
C Eval YrsPassed = %subdt(ISO_Today:*Y)-2000
C Eval Nov1 = D'2000-11-01' + %years(YrsPassed)
*,DayOfWeek 1=Sunday, 2=Monday........
*,If 0 then it is Saturday, make it 7
C Eval DayOfWeek = %rem(%diff(Nov1:SatDay:*D):7)
C If DayOfWeek = 0
C Eval DayOfWeek = 7
C EndIf
*,The following will take the first day of November
*,add the number of days to get the first Thursday
*,and then add 3 week to get the 4th Thursday.
C Select
*,Sun
C When DayOfWeek = 1
C Eval ThanksGiving = Nov1 + %days(4) + %days(21)
*,Mon
C When DayOfWeek = 2
C Eval ThanksGiving = Nov1 + %days(3) + %days(21)
*,Tues
C When DayOfWeek = 3
C Eval ThanksGiving = Nov1 + %days(2) + %days(21)
*,Wed
C When DayOfWeek = 4
C Eval ThanksGiving = Nov1 + %days(1) + %days(21)
*,Thu
C When DayOfWeek = 5
C Eval ThanksGiving = Nov1 + %days(21)
*,Fri
C When DayOfWeek = 6
C Eval ThanksGiving = Nov1 + %days(6) + %days(21)
*,Sat
C When DayOfWeek = 7
C Eval ThanksGiving = Nov1 + %days(5) + %days(21)
C EndSL
C Return ThanksGiving
P ThanksGiving E
==================================
MORE INFORMATION ON THIS TOPIC
==================================
The Best Web Links: tips, tutorials and more.
Ask your programming questions--or help out your peers by answering them--in our live discussion forums.
Ask the Experts yourself: Our application development gurus are waiting to answer your programming questions.