Какой день недели?

 Маялся со старой программой, стал разбираться и вот что вышло

Procedure isLeapYear(Year)
  If (Year%4=0 And Year%100) Or Year%400=0
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure
;25 июля 2016 года: (25 + 0 + 5) % 7 = 30 % 7 = 2 — понедельник;
;8 августа 2017 года: (8 + 3 + 6) % 7 = 17 % 7 = 3 — вторник;
dday=8
dmon=8
dyear=2017
;день недели = (день + код месяца + код года) % 7
; Код месяца нужно просто запомнить.
; 1 — январь, октябрь;
; 2 — май;
; 3 — август;
; 4 — февраль, март, ноябрь;
; 5 — июнь;
; 6 — декабрь, сентябрь;
; 0 — апрель, июль.
Select dmon
  Case 1,10:km=1
  Case 5:km=2
  Case 8:km=3
  Case 2,3,11:km=4
  Case 6:km=5
  Case 12,9:km=6
  Case 4,7:km=0
  Default:
    Debug "no month"
   End
EndSelect
If Not isLeapYear(dyear)
  If m=1 Or m=12
  km-1
EndIf
EndIf
;код года = (6 + последние две цифры года + последние две цифры года / 4) % 7
kg=(6+Val(Mid(Str(dyear),3,2))+Val(Mid(Str(dyear),3,2))/4)%7
;Debug Val(Mid(Str(dyear),3,2))
;0 — суббота, 1 — воскресенье
dw=(dday+km+kg)%7
Select dw
    Case 0:d$="суббота"
    Case 1:d$="воскресенье"
    Case 2:d$="понедельник"
    Case 3:d$="вторник"
    Case 4:d$="среда"
    Case 5:d$="четверг"
    Case 6:d$="пятница"
  EndSelect
  Debug d$


Комментарии