Признаться, я с трудом могу даже вспомнить обстоятельства, заставившие заниматься этим скриптом. Тем более, что часть кода не моя, я об этом писал. Если нашли ошибку, исправляйте, тестируйте, публикуйте конечный результат. Я не против. Если я что-то выложил в свободный доступ, значит я не против любых изменений.
Заметьте, нигде в скриптах я не указываю авторство. Это моя принципиальная позиция. Как старый пират, я люблю халяву и всеми силами множу то, что могу сделать безнаказанно. Но как человек, активно использующий лицензии, я стараюсь не задевать своей деятельностью интересы тех, кто зарабатывает на жизнь кодингом и программированием. На лицо конфликт интересов
Но такова уж моя противоречивая натура.
Ну и по поводу ошибки в коде. Ну не помню я его. От слова совсем. Простите, но так уж получилось.
Хотя, я тут посмотрел свежим взглядом. Да, всё верно. Все замечания по делу. Ну так и это не скрипт, а набросок для любопытных. Но в целом спасибо, я поправлю тело скрипта. Вот так получается
Код: Выделить всё
#Символ разделителя времени
:local Mysymbol ":";
#Изменение времени (максимум 23 часа 59 минут 59 секунд). Если надо отнять, делаем значение переменной отрицательным
:local deltaH ;
:local deltaM ;
:local deltaS ;
#Берём время роутера
:local TimeA [/system clock get time];
#Время два символа и прибавить к ним изменение
#Часы
:local MyTime1 ([:pick $TimeA 0 2]+$deltaH);
#Минуты
:local MyTime2 ([:pick $TimeA 3 5]+$deltaM);
#Секунды
:local MyTime3 ([:pick $TimeA 6 8]+$deltaS);
#Условие
#Если секунды получились больше 60, уменьшаем на 60, к минутам прибавляем 1. Если секунды меньше нуля, прибавляем 60 и отнимаем 1 от минут
:if ($MyTime3>="60") do={ :set MyTime3 ($MyTime3 - 60); :set MyTime2 ($MyTime2 + 1);} else={:if ($MyTime3<"0") do={ :set MyTime3 ($MyTime3 + 60); :set MyTime2 ($MyTime2 - 1);}};
#Если минуты получились больше 60, уменьшаем на 60, к часам прибавляем 1. Если минуты меньше нуля, прибавляем 60 и отнимаем 1 от часов
:if ($MyTime2>="60") do={ :set MyTime2 ($MyTime2 - 60); :set MyTime1 ($MyTime1 + 1);} else={:if ($MyTime2<"0") do={ :set MyTime2 ($MyTime2 + 60); :set MyTime1 ($MyTime1 - 1);}};
#Если часы получились больше 24, уменьшаем на 24 Если часы меньше нуля, прибавляем 24
:if ($MyTime1>="24") do={ :set MyTime1 ($MyTime1 - 24)} else={:if ($MyTime1<"0") do={ :set MyTime1 ($MyTime1 + 24)}};
#Получаем значение текущего времени плюс $delta
:local DeltaPlus [:totime ($MyTime1.$Mysymbol.$MyTime2.$Mysymbol.$MyTime3)];
:put info $MyTime1;
:put info $MyTime2;
:put info $MyTime3;
:put info $DeltaPlus;
Ну а уж обходить заявленный вам момент, когда в момент отработки скрипта случится полночь - пусть это обсасывают те, кто решится засовывать эту муру куда-нибудь в скрипт
Мне нужно было такое лишь разок, да и то не очень долго. И там Illinory что-то дописывал. Сейчас уж и не вспомнить. Может он и поправил то, что вы упомянули. Во всяком случае сейчас этот код точно нигде и никак не используется.
Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...