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

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Скрипт из Микротик 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]


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4358
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

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


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

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

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


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Вот тут можно взять "правильные версии":

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

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


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Ответить