Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
|
mikrotik:rb3011uias:routeros:system:scripts:functions:day_of_the_week [2020/12/08 01:57] Николай Солошин создано |
mikrotik:rb3011uias:routeros:system:scripts:functions:day_of_the_week [2022/02/12 11:40] (текущий) |
||
|---|---|---|---|
| Строка 5: | Строка 5: | ||
| Мой вариант((В Интернете есть несколько других кейсов, | Мой вариант((В Интернете есть несколько других кейсов, | ||
| + | |||
| + | :!: [[# | ||
| ===== Комментарии к коду ===== | ===== Комментарии к коду ===== | ||
| Строка 24: | Строка 26: | ||
| :local year;</ | :local year;</ | ||
| - | Вводим массивы с данными. Обратите внимание в каком порядке следуют дни недели и какая нумерация у месяцев. Так должно быть согласно алгоритму. | + | < |
| < | < | ||
| Строка 39: | Строка 41: | ||
| :if ( [ :pick $date 9 10 ] = 0 ) do={ :set year [ :pick $date 10 11 ]; } else={ :set year [ :pick $date 9 11 ]; }</ | :if ( [ :pick $date 9 10 ] = 0 ) do={ :set year [ :pick $date 10 11 ]; } else={ :set year [ :pick $date 9 11 ]; }</ | ||
| - | Корректируем номер | + | Корректируем номер |
| < | < | ||
| Строка 96: | Строка 98: | ||
| \_+ \$year + ( \$year / 4 ) + ( 5 * \$century ) );\r\ | \_+ \$year + ( \$year / 4 ) + ( 5 * \$century ) );\r\ | ||
| \n :set result ( \$days -> ( \$result % 7 ) );\r\ | \n :set result ( \$days -> ( \$result % 7 ) );\r\ | ||
| + | \n\r\ | ||
| + | \n :return \$result; | ||
| + | \n}\r\ | ||
| + | \n\r\ | ||
| + | \n# With love from Vladivostok."</ | ||
| + | |||
| + | ===== Модификация функции ===== | ||
| + | |||
| + | Модифицированная функция, | ||
| + | |||
| + | НАПИСАТЬ, | ||
| + | |||
| + | ==== Комментарии к коду ==== | ||
| + | |||
| + | Этот код содержит такие изменения: | ||
| + | |||
| + | === Добавлено === | ||
| + | |||
| + | Получение часа из текущего времени и преобразование строки в число. | ||
| + | |||
| + | < | ||
| + | |||
| + | Строка для тестирования. | ||
| + | |||
| + | < | ||
| + | |||
| + | Удаление нуля в первой позиции из времени. | ||
| + | |||
| + | < | ||
| + | |||
| + | Сборка массива. | ||
| + | |||
| + | < | ||
| + | :set ( $result -> " | ||
| + | |||
| + | === Изменено === | ||
| + | |||
| + | Добавлено преобразование в массив. | ||
| + | |||
| + | < | ||
| + | |||
| + | Убрана трансформация в буквенный код дня недели. | ||
| + | |||
| + | < | ||
| + | |||
| + | === Убрано === | ||
| + | |||
| + | Этот массив больше не нужен, т.к. отдаем в виде цифры. | ||
| + | |||
| + | < | ||
| + | |||
| + | ==== Код для импорта ==== | ||
| + | |||
| + | <file rsc day-of-week-and-time.rsc>/ | ||
| + | add comment=" | ||
| + | \E0\FF \E4\E5\ED\FC \ED\E5\E4\E5\EB\E8 \E8 \E2\F0\E5\EC\FF" | ||
| + | dont-require-permissions=no name=day-of-week-and-time owner=vasya policy=\ | ||
| + | read, | ||
| + | shin.su) for RouterOS v6.47.8 on hAP (mipsbe) @ 2020.12\r\ | ||
| + | \n\r\ | ||
| + | \n:global dayAndTime do={\r\ | ||
| + | \n :local date [ /system clock get date ];\r\ | ||
| + | \n :local time [ :tonum [ :pick [ /system clock get time ] 0 2 ] ];\r\ | ||
| + | \n\r\ | ||
| + | \n # For test\r\ | ||
| + | \n #:local time [ :tonum 14 ];\r\ | ||
| + | \n #:local date \" | ||
| + | \n\r\ | ||
| + | \n :local day;\r\ | ||
| + | \n :local year;\r\ | ||
| + | \n :local result [ :toarray \" | ||
| + | \n\r\ | ||
| + | \n :local months {mar=\" | ||
| + | \" | ||
| + | \r\ | ||
| + | \n\r\ | ||
| + | \n :local month ( \$months -> [ :pick \$date 0 3 ] );\r\ | ||
| + | \n :local century [ :pick \$date 7 9 ];\r\ | ||
| + | \n\r\ | ||
| + | \n # If the first char is a 0 (zero) only read last char, else script fai\ | ||
| + | ls\r\ | ||
| + | \n :if ( [ :pick \$date 4 5 ] = 0 ) do={ :set day [ :pick \$date 5 6 ]; }\ | ||
| + | \_else={ :set day [ :pick \$date 4 6 ]; }\r\ | ||
| + | \n :if ( [ :pick \$date 9 10 ] = 0 ) do={ :set year [ :pick \$date 10 11 \ | ||
| + | ]; } else={ :set year [ :pick \$date 9 11 ]; }\r\ | ||
| + | \n :if ( [ :pick \$time 0 1 ] = 0 ) do={ :set time [ :pick \$time 0 1 ]; \ | ||
| + | }\r\ | ||
| + | \n \r\ | ||
| + | \n # Adjusting the year value for January and February\r\ | ||
| + | \n :if ( \$month = 13 || \$month = 14 ) do={ :set year ( \$year - 1 ); }\ | ||
| + | \r\ | ||
| + | \n\r\ | ||
| + | \n # Modified Zeller' | ||
| + | \n :set day ( \$day + ( 13 * ( \$month + 1 ) / 5 ) + ( \$century / 4 ) + \ | ||
| + | \$year + ( \$year / 4 ) + ( 5 * \$century ) );\r\ | ||
| + | \n :set day ( \$day % 7 );\r\ | ||
| + | \n\r\ | ||
| + | \n :set ( \$result -> \" | ||
| + | \n :set ( \$result -> \" | ||
| \n\r\ | \n\r\ | ||
| \n :return \$result; | \n :return \$result; | ||
| Строка 104: | Строка 205: | ||
| ===== Пример использования ===== | ===== Пример использования ===== | ||
| - | Т.к. функция глобальная, после запуска | + | Т.к. функции глобальные, после запуска |
| + | |||
| + | Вывод оригинальной функции: | ||
| < | < | ||
| dec/08/2020 | dec/08/2020 | ||
| tue</ | tue</ | ||
| + | |||
| + | Вывод модифицированной функции: | ||
| + | |||
| + | < | ||
| + | dec/08/2020 | ||
| + | 18:29:37 | ||
| + | day=3; | ||
| + | |||
| + | // | ||
| ==== Политики запуска ==== | ==== Политики запуска ==== | ||
| - | Это минимально необходимый набор для работы | + | Это минимально необходимый набор для работы |
| * read, | * read, | ||