Restored from previous forum. Originally posted by PB.
Checks if a date is valid. Returns 1 if yes, or 0 if no.
Code: Select all
Procedure IsDateValid(d,m,y)
v = 1 ; 1=Valid, 0=Invalid.
If d > 31
v = 0 ; Day must be 1-31.
ElseIf m > 12
v = 0 ; Month must be 1-12.
ElseIf m = 2 And d > 28
If d > 29
v=0 ; February never has more than 29 days.
Else
; Check if February of the year "y" is a Leap Year. Note that the year
; 3600 is a one-off special case (www.google.com/search?q=leap+year+faq).
v=Bool(y%4=0 And Bool(y%1000 Or y%400=0) And y%3600)
EndIf
ElseIf d = 31 And (m=4 Or m=6 Or m=9 Or m=11)
v=0 ; These months have only 30 days.
EndIf
ProcedureReturn v
EndProcedure
Debug IsDateValid(99,5,2002) ; Returns 0 (no month has >31 days).
Debug IsDateValid(20,5,2002) ; Returns 1 (this is a valid date).
Debug IsDateValid(31,6,2002) ; Returns 0 (June has only 30 days).
Debug IsDateValid(29,2,2000) ; Returns 1 (2000 is a Leap Year).
Debug IsDateValid(29,2,2002) ; Returns 0 (2002 isn't a Leap Year).
Debug IsDateValid(29,2,3600) ; Returns 0 (3600 isn't a Leap Year).