Страница 2 из 2
Re: нужен скрипт расчета завтрашней даты
Добавлено: 25 сен 2020, 15:06
Sertik
Вот ведь вредный какой ...
найти конец текущего дня через деление на остаток и проверить диапазон секунд следуещего дня.
Получил текущее unix-время. На остаток чего его делить - часов ? секунд ? до конца текущих суток ? И как в дату то преобразовать ?
Re: нужен скрипт расчета завтрашней даты
Добавлено: 25 сен 2020, 15:28
pepelxl
Что то вы совсем думать обленились, за готовым кодом - коммерческий раздел.
Epoch ℅ 86400 = текущая секунда в сутках
86400 - текущая секунда = секунд до следующих суток
Соответственно epoch + секунд до следующих суток = следующие сутки
If curent epoch > calculated = следующие сутки
Что вам нужно найти я не знаю, по этому адаптируйте под ваши хотелки
Re: нужен скрипт расчета завтрашней даты
Добавлено: 25 сен 2020, 15:45
Sertik
Всё что Вы написали понятно, но !!
Мне нужно получить завтрашнюю дату в формате Планировщика, например Sep/26/2020
Как преобразовать секунды в дату в таком формате ? Тут явно нужно писать функцию обратного преобразования от функции Epoch по Ваше ссылке.
Я такого не могу, это долго. Вот и спрашивал нет ли готовой.
Re: нужен скрипт расчета завтрашней даты
Добавлено: 25 сен 2020, 15:57
pepelxl
Готовой нет, возьми мою функцию UnixTimeToFormat, 1/3 с верху - и есть расчёт, остальное тебе не нужно, останется привести к формату time mikrotik
Re: нужен скрипт расчета завтрашней даты
Добавлено: 25 сен 2020, 20:52
Sertik
Спасибо, воспользовался Вашей функцией UnixTimeToFormat, почти без правок.
На входе - unix-время, на выходе - дата в формате Микротика.
Может кому пригодиться. Мне была нужна, чтобы добавлять скриптом задания в Планировщик на дни вперед.
Код: Выделить всё
# Считаются только unsigned
# условие проверки високосного года ограничено текущей соткой
:global FuncUnixDateToFormat do={
:local timeStamp $1
:local decodedLine ""
:local dateY ($timeStamp / 31436000 + 1970)
:local dateM (($dateY - 1969) / 4)
:local dateD ($timeStamp / 86400 - $dateM)
:set $dateY ($dateD / 365 + 1970)
:set $dateD ($dateD % 365)
:local months [:toarray (31,28,31,30,31,30,31,31,30,31,30,31)]
:if (($dateY % 4) = 0) do={:set ($months->1) 29}
do {
:for i from=0 to=11 do={:if (($months->$i) >= $dateD) do={:set $dateM ($i + 1); :set $dateD ($dateD +1); break;} else={:set $dateD ($dateD - ($months->$i))}}
} on-error={}
:local timeS ($timeStamp % 86400)
:local timeH ($timeS / 3600)
:local timeM ($timeS % 3600 / 60)
:set $timeS ($timeS - $timeH * 3600 - $timeM * 60)
:local mstr [:toarray {"1"="Jan"; "2"="Feb"; "3"="Mar"; "4"="Apr"; "5"="May"; "6"="Jun"; "7"="Jul"; "8"="Aug"; "9"="Sep"; "10"="Oct"; "11"="Nov"; "12"="Dec"}]
:local month ($mstr->[:tostr $dateM])
:local date ("$month/"."$[:tostr $dateD]/"."$[:tostr $dateY]")
:return $date
}
# :log info [$FuncUnixDateToFormat "1601078400"]