Welcome Guest, you are in: Login

Fruit Of The Shed

Navigation (MMBasic)






Search the wiki

»


Day of the week for any date

Modified on 2016/12/23 23:25 by Administrator Categorized as Dates, Time and Clocks, Maths, _LIB Original MMBasic

This module is part of the original MMBasic library. It is reproduced here with kind permission of Hugh Buckle and Geoff Graham. Be aware it may reference functionality which has changed or is deprecated in the latest versions of MMBasic.

Note: Any required file(s) are available in the attachments tab (top right).


DATE_DAY.BAS
'''''''''''''''''''''''''''''''''''''''''''
' DAY OF THE WEEK FOR ANY DATE            '
' developed January 2012 for MMBasic 3.1  '
' theo.reimer(at)bigpond.com                 '
' program base date: Sunday 01/01/2012    '
' Now, 365 / 7 = 52 weeks and one day .   '
' Thus, day of week for a particular date '
' drifts by one or two days per year.     '
'''''''''''''''''''''''''''''''''''''''''''
Cls
Print "--------------------------------"
Print "* Day of the week for any date *"
Print "--------------------------------"
Print
Print "The Gregorian calendar came into use in 1582, so day of the week"
Print "for a particular date is not relevant for dates prior to the year"
Print "1582, although this program will generate a day of the week from"
Print "the year zero to the year 9999."
Print
Print "Press <Ctrl><C> to EXIT!"
Print
Print "Enter date as  DD*MM*YYYY  where * is any separator character,"
Print "followed by the <Enter> key, e.g., 31/12/2011 or 01-02-2012 ."
''''''''''''''''''''''''''''''''''''''''''
Do ' MAIN LOOP
''''''''''''''''''''''''''''''''''''''''''
GETDATE:
Print
Input "Date"; MYDATE$
D$ = Left$(MYDATE$,2)  : MYDAY   = Val(D$)
M$ = Mid$(MYDATE$,4,2) : MYMONTH = Val(M$)
Y$ = Right$(MYDATE$,4) : MYYEAR  = Val(Y$)
EM$ = "DATE or SYNTAX INVALID - TRY AGAIN!"
LEAPYEAR MYYEAR
If Len(MYDATE$) <> 10 Then
  Print EM$ : GoTo GETDATE
ElseIf (MYDAY <  1) Or (MYDAY > 31) Then
  Print EM$ : GoTo GETDATE
ElseIf (MYMONTH <  1) Or (MYMONTH > 12) Then
  Print EM$ : GoTo GETDATE
ElseIf (MYMONTH =  2) And (MYDAY > (28 + LY)) Then
  Print EM$ : GoTo GETDATE
ElseIf (MYMONTH =  4) And (MYDAY > 30) Then
  Print EM$ : GoTo GETDATE
ElseIf (MYMONTH =  6) And (MYDAY > 30) Then
  Print EM$ : GoTo GETDATE
ElseIf (MYMONTH =  9) And (MYDAY > 30) Then
  Print EM$ : GoTo GETDATE
ElseIf (MYMONTH = 11) And (MYDAY > 30) Then
  Print EM$ : GoTo GETDATE
EndIf
''''''''''''''''''''''''''''''''''''''''''
If MYYEAR >= 2012 Then
  DAYS_FROM_START_OF_YEAR
  DD = SC Mod 7
  If MYYEAR > 2012 Then
    For X = 2012 To (MYYEAR - 1)
      LEAPYEAR X
      DD = DD + 1 + LY
    Next
    DD = DD Mod 7
  EndIf
  If DD = 0 Then
    DOW$ = "Sunday"
  ElseIf DD = 1 Then
    DOW$ = "Monday"
  ElseIf DD = 2 Then
    DOW$ = "Tuesday"
  ElseIf DD = 3 Then
    DOW$ = "Wednesday"
  ElseIf DD = 4 Then
    DOW$ = "Thursday"
  ElseIf DD = 5 Then
    DOW$ = "Friday"
  ElseIf DD = 6 Then
    DOW$ = "Saturday"
  EndIf
''''''''''''''''''''''''''''''''''''''''''
Else
''''''''''''''''''''''''''''''''''''''''''
  DAYS_TO_END_OF_YEAR
  DD = SC Mod 7
  If MYEAR < 2011 Then
    For X = (MYYEAR + 1) To 2011
      LEAPYEAR X
      DD = DD + 1 + LY
    Next
    DD = DD Mod 7
  EndIf
  If DD = 0 Then
    DOW$ = "Sunday"
  ElseIf DD = 1 Then
    DOW$ = "Saturday"
  ElseIf DD = 2 Then
    DOW$ = "Friday"
  ElseIf DD = 3 Then
    DOW$ = "Thursday"
  ElseIf DD = 4 Then
    DOW$ = "Wednesday"
  ElseIf DD = 5 Then
    DOW$ = "Tuesday"
  ElseIf DD = 6 Then
    DOW$ = "Monday"
  EndIf
EndIf
''''''''''''''''''''''''''''''''''''''''''
If MYMONTH =  1 Then
  MOY$ = "January"
ElseIf MYMONTH =  2 Then
  MOY$ = "February"
ElseIf MYMONTH =  3 Then
  MOY$ = "March"
ElseIf MYMONTH =  4 Then
  MOY$ = "April"
ElseIf MYMONTH =  5 Then
  MOY$ = "May"
ElseIf MYMONTH =  6 Then
  MOY$ = "June"
ElseIf MYMONTH =  7 Then
  MOY$ = "July"
ElseIf MYMONTH =  8 Then
  MOY$ = "August"
ElseIf MYMONTH =  9 Then
  MOY$ = "September"
ElseIf MYMONTH = 10 Then
  MOY$ = "October"
ElseIf MYMONTH = 11 Then
  MOY$ = "November"
ElseIf MYMONTH = 12 Then
  MOY$ = "December"
EndIf
''''''''''''''''''''''''''''''''''''''''''
If MYDAY < 10 Then
  D$ = " " + Right$(D$,1)
EndIf
If Left$(Y$,3) = "000" Then
  Y$ = " " + Right$(Y$,1)
ElseIf Left$(Y$,2) = "00" Then
  Y$ = " " + Right$(Y$,2)
ElseIf Left$(Y$,1) = "0" Then
  Y$ = " " + Right$(Y$,3)
EndIf
''''''''''''''''''''''''''''''''''''''''''''''
' OUTPUT RESULT
Print DOW$ + " " + D$ + " " + MOY$ + " " + Y$
''''''''''''''''''''''''''''''''''''''''''''''
Loop
''''''''''''''''''''''''''''''''''''''''''
Sub LEAPYEAR ( YEAR )
  LY = 0
  If YEAR Mod 4 = 0 Then
    LY = 1
    If YEAR Mod 100 = 0 Then
      LY = 0
      If YEAR Mod 400 = 0 Then
        LY = 1
      EndIf
    EndIf
  EndIf
End Sub
''''''''''''''''''''''''''''''''''''''''''
Sub DAYS_FROM_START_OF_YEAR
  If MYMONTH =  1 Then
    SC =  MYDAY - 1
  ElseIf MYMONTH =  2 Then
    SC =  MYDAY + 30
  ElseIf MYMONTH =  3 Then
    SC =  MYDAY + 58 + LY
  ElseIf MYMONTH =  4 Then
    SC =  MYDAY + 89 + LY
  ElseIf MYMONTH =  5 Then
    SC =  MYDAY + 119 + LY
  ElseIf MYMONTH =  6 Then
    SC =  MYDAY + 150 + LY
  ElseIf MYMONTH =  7 Then
    SC =  MYDAY + 180 + LY
  ElseIf MYMONTH =  8 Then
    SC =  MYDAY + 211 + LY
  ElseIf MYMONTH =  9 Then
    SC =  MYDAY + 242 + LY
  ElseIf MYMONTH = 10 Then
    SC =  MYDAY + 272 + LY
  ElseIf MYMONTH = 11 Then
    SC =  MYDAY + 303 + LY
  ElseIf MYMONTH = 12 Then
    SC =  MYDAY + 333 + LY
  EndIf
End Sub
''''''''''''''''''''''''''''''''''''''''''
Sub DAYS_TO_END_OF_YEAR
  If MYMONTH = 12 Then
    SC =  32 - MYDAY
  ElseIf MYMONTH = 11 Then
    SC =  62 - MYDAY
  ElseIf MYMONTH = 10 Then
    SC =  93 - MYDAY
  ElseIf MYMONTH =  9 Then
    SC = 123 - MYDAY
  ElseIf MYMONTH =  8 Then
    SC = 154 - MYDAY
  ElseIf MYMONTH =  7 Then
    SC = 185 - MYDAY
  ElseIf MYMONTH =  6 Then
    SC = 215 - MYDAY
  ElseIf MYMONTH =  5 Then
    SC = 246 - MYDAY
  ElseIf MYMONTH =  4 Then
    SC = 276 - MYDAY
  ElseIf MYMONTH =  3 Then
    SC = 307 - MYDAY
  ElseIf MYMONTH =  2 Then
    SC = 335 - MYDAY + LY
  ElseIf MYMONTH =  1 Then
    SC = 366 - MYDAY + LY
  EndIf
End Sub
''''''''''''''''''''''''''''''''''''''''''