Calculating weekdays

Hi,

I was searching a way to calculate the weekday for enabling different HotSpot settings.
This script return the weekday in a global Aweekday variable. Maybe it’s intersting someone else…

Weekday is returned in the following format:

Saturday 0
Sunday 1
Monday 2
Tuesday 3
Wednesday 4
Thursday 5
Friday 6

Working for 1900 to 2099…

Cheers,
Julien Hoppe
http://www.wifx.net


:global Aweekday
:local Hyear

:local Ayear [:pick [/sys clock get date] ([:len [/sys clock get date]] - 4) [:len [/sys clock get date]]]
:local Aday [:tonum [:pick [/sys clock get date] ([:find [/sys clock get date] "/"] + 1) ([:len [/sys clock get date]] - 5)]]
:local Amonth [:pick [/sys clock get date] 0 3]
:if ([:pick $Ayear 2 3] = "0") do={:set Hyear [:tonum [:pick $Ayear 3 4]]} else={:set Hyear [:tonum [:pick $Ayear 2 4]]}

:local res1 ($Hyear / 12)
:local res2 (($Hyear - ($res1 * 12)) / 4)
:local res3 ($res1 + ($Hyear - ($res1 * 12)) + $res2)
:local res4 ($res3 / 7)
:local res5 ($res3 - ($res4 * 7) + $Aday)

:if ([:pick $Ayear 0 1] = "2") do={:set res5 ($res5 - 1)}

:if ($Amonth = "jan") do={
  :for wcpt from=0 to=99  step 4 do={
    :if ($Hyear = $wcpt) do={:set res5 ($res5 - 1)}
  }
  :set res5 ($res5 + 1)
  :local res6 (($res5) / 7)
  :set Aweekday ($res5 - ($res6 * 7))
}
:if ($Amonth = "feb") do={
  :for wcpt from=0 to=99  step 4 do={
    :if ($Hyear = $wcpt) do={:set res5 ($res5 - 1)}
  }
  :set res5 ($res5 + 4)
  :local res6 (($res5) / 7)
  :set Aweekday ($res5 - ($res6 * 7))
}
:if ($Amonth = "mar") do={
  :set res5 ($res5 + 4)
  :local res6 (($res5) / 7)
  :set Aweekday ($res5 - ($res6 * 7))
}
:if ($Amonth = "apr") do={
  :set res5 ($res5 + 0)
  :local res6 (($res5) / 7)
  :set Aweekday ($res5 - ($res6 * 7))
}
:if ($Amonth = "may") do={
  :set res5 ($res5 + 2)
  :local res6 (($res5) / 7)
  :set Aweekday ($res5 - ($res6 * 7))
}
:if ($Amonth = "jun") do={
  :set res5 ($res5 + 5)
  :local res6 (($res5) / 7)
  :set Aweekday ($res5 - ($res6 * 7))
}
:if ($Amonth = "jul") do={
  :set res5 ($res5 + 0)
  :local res6 (($res5) / 7)
  :set Aweekday ($res5 - ($res6 * 7))
}
:if ($Amonth = "aug") do={
  :set res5 ($res5 + 3)
  :local res6 (($res5) / 7)
  :set Aweekday ($res5 - ($res6 * 7))
}
:if ($Amonth = "sep") do={
  :set res5 ($res5 + 6)
  :local res6 (($res5) / 7)
  :set Aweekday ($res5 - ($res6 * 7))
}
:if ($Amonth = "oct") do={
  :set res5 ($res5 + 1)
  :local res6 (($res5) / 7)
  :set Aweekday ($res5 - ($res6 * 7))
}
:if ($Amonth = "nov") do={
  :set res5 ($res5 + 4)
  :local res6 (($res5) / 7)
  :set Aweekday ($res5 - ($res6 * 7))
}
:if ($Amonth = "dec") do={
  :set res5 ($res5 + 6)
  :local res6 (($res5) / 7)
  :set Aweekday ($res5 - ($res6 * 7))
}

:log info ("Aweekday " . $Aweekday)