Страница 1 из 1

Функция калькулятор дня недели по дате

Добавлено: 17 сен 2020, 07:52
Sertik
Скрипт из Микротик Wiki "обернул" в функцию позволяющую расчитать день недели по текущей дате
Может пригодится для планирования расписания, обхода в исполнении скриптов "выходных" дней и т.д...
На входе аргументов не имеет, на выходе - текущий день недели в сокращенном английском формате:

sun,mon,tue,wed,thu,fri,sat

Код под катом
 
:global FuncCalcdow do={

# Calculates day of the week for a givien date
# Month: jan,feb ... nov,dec (must be lower-case)
# Day: 1 - 31
# Year: 1900 - 2999
# mmm/dd/yyyy same format as [/system clock get date]
# (ex. jul/22/2009)

:local date [/system clock get date]

# Math Calculation here
:local result ""
:local months [:toarray "jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec"]
:local monthtbl [:toarray "0,3,3,6,1,4,6,2,5,0,3,5"]
:local daytbl [:toarray "sun,mon,tue,wed,thu,fri,sat"]

:local month [:pick $date 0 3]
:local day [:pick $date 4 6]
:local dayc [:pick $date 5 6]
:local century [:pick $date 7 9]
:local year [:pick $date 9 11]
:local yearc [:pick $date 10 11]

# if the first char is a 0 (zero) only read last char, else script fails
:if ([:pick $date 4 5] = 0) do={ :set day ($dayc)}
:if ([:pick $date 9 10] = 0) do=[:set year ($yearc)]

:local sum 0
:set sum ($sum + (2 * (3 - ($century - (($century / 4) * 4)))))
:set sum ($sum + ($year / 4))
:set sum ($sum + $year + $day)
:for mindex from=0 to=[:len $months] do={
:if ([:pick $months $mindex] = $month) do={:set sum ($sum + [:pick $monthtbl $mindex]) }
}
:set sum ($sum - (($sum / 7) * 7))
:set result [:pick $daytbl $sum]

# END Math Calculation

# :log info ([:pick $date 0 3] . "/" . [:pick $date 4 6] . "/" . [:pick $date 7 9] . [:pick $date 9 11] . " is on a " . $result)
:return $result}

# :log info [$FuncCalcdow]

Re: Функция калькулятор дня недели по дате

Добавлено: 28 янв 2024, 19:22
podarok66
Скрипт стал определять день недели некорректно. Почему, не разбирался. Сегодня показал mon, что не есть правда. :-)

Re: Функция калькулятор дня недели по дате

Добавлено: 06 фев 2024, 12:46
Sertik
1. Для начала какая версия РОС ? (Был ли переход на новый формат поддержки дат РОС Микротик, актуально для ветки 7, в 6 вроде как не было).

2. Во-вторых: моя функция была основана на "забугорном" старом скрипте вычисления дня недели по дате, я лишь "обернул" скрипт в функцию (о чём и честно писал в посте выше), на этом моя миссия была окончена ... Возможно в алгоритме есть ошибка, за это время уже появилась "новая версия" алгоритма скрипта от REXTENDED (см. на оф.форуме). Будет время, перекрою и выложу сюда ...

Re: Функция калькулятор дня недели по дате

Добавлено: 06 фев 2024, 13:10
Sertik
Вот тут можно взять "правильные версии":

UNIX time Epoch, day of the week, ISO:8601 date
https://forum.mikrotik.com/viewtopic.php?t=177551

Rex это супер программер ! Его коллекция скриптов, манера писать и алгоритмы весьма впечатляют (и не только меня, он признанный мастер "скриптописания" на оф.форуме). Но не устойчив, как все супер талантливые личности ...