<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Mikrotik.moscow [тема: Сделал! Написал скрипт для вычисления UNIX time!]</title>
		<link>http://mikrotik.moscow</link>
		<description>Новое в теме Сделал! Написал скрипт для вычисления UNIX time! форума RouterOS на сайте Mikrotik.moscow [mikrotik.moscow]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 02 Aug 2026 12:14:17 -0400</pubDate>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285972">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Интересно, спасибо! Я попробовал, и здесь что-то не так: [] &gt; :put [$str2case "this iS a teSt ,a teSt is it"]<br />"this iS a teSt ,a teSt is it" U и L работают нормально. BR. <br />
			<i>15.03.2023 12:20:00, diamuxin.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285972</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285972</guid>
			<pubDate>Wed, 15 Mar 2023 12:20:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285971">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Поисковый тег #rextended<br />str2case: функции для преобразования строки в нижний регистр, верхний регистр или с заглавной буквой (только первая буква заглавная, остальные строчные). Любые другие символы, отличные от A-Z a-z, остаются без изменений. Необязательный параметр: без параметра преобразует первую букву в верхний регистр, а все остальные – в нижний. "U" – преобразовать в верхний регистр, "L" – преобразовать в нижний регистр, "P" – преобразовать в строку с заглавной буквой (только первая буква в каждом слове заглавная, остальные строчные).<br />:global str2case do={<br /> &nbsp; &nbsp;:local input [:tostr "$1"]<br /> &nbsp; &nbsp;:local options "$2"<br /> &nbsp; &nbsp;:local letters "[A-Za-z]"<br /><br /> &nbsp; &nbsp;:local charsString ""<br /> &nbsp; &nbsp;:for x from=0 to=15 step=1 do={ :for y from=0 to=15 step=1 do={<br /> &nbsp; &nbsp; &nbsp; &nbsp;:local tmpHex "$[:pick "0123456789ABCDEF" $x ($x+1)]$[:pick "0123456789ABCDEF" $y ($y+1)]"<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set $charsString "$charsString$[[:parse "(\"\\$tmpHex\")"]]"<br /> &nbsp; &nbsp;} }<br /><br /> &nbsp; &nbsp;:local position 0 ; :local chrValue 0; :local what "U" ; :local output "" ; :local work "" ; :local previous ""<br /> &nbsp; &nbsp;:while ($position &lt; [:len $input]) do={<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set work [:pick $input $position ($position + 1)]<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set chrValue [:find $charsString $work -1]<br /> &nbsp; &nbsp; &nbsp; &nbsp;:if ($options~"(p|P)") do={:set what "U"}<br /> &nbsp; &nbsp; &nbsp; &nbsp;:if (($options~"(l|L)") or ((!($options~"(l|L|u|U)")) and ($previous~$letters))) do={:set what "L"}<br /> &nbsp; &nbsp; &nbsp; &nbsp;:if (($what = "L") and (($chrValue &gt; 64) and ($chrValue &lt; &nbsp;91))) do={<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:set work [:pick $charsString ($chrValue + 32) ($chrValue + 32 + 1)]<br /> &nbsp; &nbsp; &nbsp; &nbsp;}<br /> &nbsp; &nbsp; &nbsp; &nbsp;:if (($what = "U") and (($chrValue &gt; 96) and ($chrValue &lt; 123))) do={<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:set work [:pick $charsString ($chrValue - 32) ($chrValue - 32 + 1)]<br /> &nbsp; &nbsp; &nbsp; &nbsp;}<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set output "$output$work"<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set previous $work<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set position ($position + 1)<br /> &nbsp; &nbsp;}<br /> &nbsp; &nbsp;:return $output<br />} &gt; :put [$str2case “this iS a teSt ,a teSt is it”] This is a test ,a test is it &gt; :put [$str2case “this iS a teSt ,a teSt is it” “U”] THIS IS A TEST ,A TEST IS IT &gt; :put [$str2case “this iS a teSt ,a teSt is it” “L”] this is a test ,a test is it &gt; :put [$str2case “this iS a teSt ,a teSt is it” “P”] This Is A Test ,A Test Is It <br />
			<i>15.03.2023 10:16:00, rextended.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285971</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285971</guid>
			<pubDate>Wed, 15 Mar 2023 10:16:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285970">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			search tag # rextended lowercase uppercase chr2lcase chr2ucase Функции для преобразования одного символа в нижний и верхний регистр. Любые другие символы, переданные в качестве аргумента, остаются без изменений.<br /><br />:global chr2lcase do={<br /> &nbsp; &nbsp;:local charsString ""<br /> &nbsp; &nbsp;:for x from=0 to=15 step=1 do={ :for y from=0 to=15 step=1 do={<br /> &nbsp; &nbsp; &nbsp; &nbsp;:local tmpHex "$[:pick "0123456789ABCDEF" $x ($x+1)]$[:pick "0123456789ABCDEF" $y ($y+1)]"<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set $charsString "$charsString$[[:parse "(\"\\$tmpHex\")"]]"<br /> &nbsp; &nbsp;} }<br /> &nbsp; &nbsp;:local chrValue [:find $charsString $1 -1]<br /> &nbsp; &nbsp;:if (($chrValue &gt; 64) and ($chrValue &lt; 91)) do={<br /> &nbsp; &nbsp; &nbsp; &nbsp;:return [:pick $charsString ($chrValue + 32) ($chrValue + 33)]<br /> &nbsp; &nbsp;} else={<br /> &nbsp; &nbsp; &nbsp; &nbsp;:return $1<br /> &nbsp; &nbsp;}<br />}<br /><br />:global chr2ucase do={<br /> &nbsp; &nbsp;:local charsString ""<br /> &nbsp; &nbsp;:for x from=0 to=15 step=1 do={ :for y from=0 to=15 step=1 do={<br /> &nbsp; &nbsp; &nbsp; &nbsp;:local tmpHex "$[:pick "0123456789ABCDEF" $x ($x+1)]$[:pick "0123456789ABCDEF" $y ($y+1)]"<br /> &nbsp; &nbsp; &nbsp; &nbsp;:set $charsString "$charsString$[[:parse "(\"\\$tmpHex\")"]]"<br /> &nbsp; &nbsp;} }<br /> &nbsp; &nbsp;:local chrValue [:find $charsString $1 -1]<br /> &nbsp; &nbsp;:if (($chrValue &gt; 96) and ($chrValue &lt; 123)) do={<br /> &nbsp; &nbsp; &nbsp; &nbsp;:return [:pick $charsString ($chrValue - 32) ($chrValue - 31)]<br /> &nbsp; &nbsp;} else={<br /> &nbsp; &nbsp; &nbsp; &nbsp;:return $1<br /> &nbsp; &nbsp;}<br />} :put [$chr2lcase “A”] :put [$chr2ucase “a”] <br />
			<i>02.09.2021 14:17:00, rextended.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285970</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285970</guid>
			<pubDate>Thu, 02 Sep 2021 14:17:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285969">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Слишком рано утром, чтобы всё это читать. <br />
			<i>02.09.2021 08:43:00, Jotne.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285969</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285969</guid>
			<pubDate>Thu, 02 Sep 2021 08:43:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285968">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Я вообще не понимаю, я уже писал, что всегда использую `global` в этих примерах, чтобы быстро работать в терминале, а в скрипте заменяю все `global` на `local`. Вы имеете в виду, что `local` нельзя использовать, а `global` нельзя заменить в скрипте? <br />
			<i>02.09.2021 06:57:00, rextended.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285968</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285968</guid>
			<pubDate>Thu, 02 Sep 2021 06:57:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285967">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Тебе правда нужны все эти глобальные переменные, нельзя ли использовать локальные? <br />
			<i>02.09.2021 05:29:00, Jotne.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285967</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285967</guid>
			<pubDate>Thu, 02 Sep 2021 05:29:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285966">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Поиск тега #rextended mikrotik date to ISO:8601 date date2iso epoch unix time week day date2epoch date2weekday. Это первая попытка переписать функцию для преобразования данных "get date, time and gmt-offset" с Mikrotik в валидный формат ISO:8601, например, 2021-09-01T21:10:26+00:00 (Великобритания) = 2021-09-01T21:10:26Z (UTC) = 2021-09-01T23:10:26+02:00 (Италия). &nbsp;Полученная дата возвращается со строчными месяцами, тогда как дата в файле – с заглавными, и т.д. Вместо этого в логах – дата последнего доступа пользователя, дата отключения/подключения канала, строки в логах и прочее начинается с заглавной буквы (приятное решение – убрать первую букву при сравнении, вероятно, я сделаю то же самое позже). &nbsp;Программисты MikroTik не любят единообразие… Как, например, три разных формата даты в логах? Почему бы не использовать международную дату 2021-09-01??? Там понятно, где год, месяц и день… Я всегда использую `global` в этих примерах, чтобы быстро работать в терминале, а в скрипте заменяю все вхождения `global` на `local` /system clock<br />:global strDate [get date]<br />:global strTime [get time]<br />:global intGoff [:tonum [get gmt-offset]]<br />:if ($intGoff &gt; 0x7FFFFFFF) do={:set intGoff ($intGoff - 0x100000000)}<br />:global arrMonths {jan="01";feb="02";mar="03";apr="04";may="05";jun="06";jul="07";aug="08";sep="09";oct="10";nov="11";dec="12"}<br />:global intYear &nbsp; [:tonum [:pick $strDate 7 11]]<br />:global strMonth &nbsp;($arrMonths-&gt;[:pick $strDate 0 3])<br />:global strDay &nbsp; &nbsp;[:pick $strDate 4 6]<br />:global strHour &nbsp; [:pick $strTime 0 2]<br />:global strMinute [:pick $strTime 3 5]<br />:global strSecond [:pick $strTime 6 8]<br />:global strOffsig "+"<br />:global strGoff &nbsp; $intGoff<br />:if ($intGoff &lt; 0) do={:set strOffsig "-"; :set strGoff ($intGoff * -1)}<br />:global strHoff &nbsp;[:pick [:totime $strGoff] 0 2]<br />:global strMoff &nbsp;[:pick [:totime $strGoff] 3 5]<br />:global strISOdate "$intYear-$strMonth-$strDay\54$strHour:$strMinute:$strSecond$strOffsig$strHoff:$strMoff"<br />:put "$strDate $strTime $strOffsig$intGoff converted to ISO format is $strISOdate" (EDIT later: upgraded version of this script <noindex><a href="https://forum.mikrotik.com/viewtopic.php?p=960070#p960070)" target="_blank" rel="nofollow" >https://forum.mikrotik.com/viewtopic.php?p=960070#p960070)</a></noindex> и после этого, скрипт рассчитывает “epoch” время в формате UNIX. Это продолжение роутерборда. Я не считаю секунды часового пояса, так как на момент написания не существует часовых поясов с “секундами”. Скрипт включает расчет високосного года и день недели. Точный расчет до 2100 года, но, вероятно, к тому времени всех нас уже не будет. Эх… :global arrPreMonDays {"01"=0;"02"=31;"03"=59;"04"=90;"05"=120;"06"=151;"07"=181;"08"=212;"09"=243;"10"=273;"11"=304;"12"=334}<br /># 1970-01-01 is a Thursday<br />:global arrWeekDays &nbsp; {"Thu";"Fri";"Sat";"Sun";"Mon";"Tue";"Wed"}<br /># first bixestile year immediately before 1970 is 1968<br />:global numTotalDays &nbsp;(($intYear - 1968) / 4)<br />:global bolLeapYear &nbsp; false<br />:if ((($intYear - 1968) % 4) = 0) do={:set bolLeapYear true; :set ($arrPreMonDays-&gt;"01") -1; :set ($arrPreMonDays-&gt;"02") 30}<br />:set numTotalDays &nbsp;($numTotalDays + (($intYear - 1970) * 365))<br />:set numTotalDays &nbsp;($numTotalDays + ($arrPreMonDays-&gt;$strMonth))<br />:set numTotalDays &nbsp;($numTotalDays + ([:tonum $strDay] - 1))<br />:global strWeekDay ($arrWeekDays-&gt;($numTotalDays % 7))<br />:global numTotHours &nbsp; (($numTotalDays * 24) + [:tonum $strHour])<br />:global numTotMinutes (($numTotHours * 60) + [:tonum $strMinute])<br />:global numTotSeconds (($numTotMinutes * 60) + [:tonum $strSecond] - $intGoff)<br />:put "For $strISOdate UNIX time is $numTotSeconds the current year is a lap year:$bolLeapYear and the Week Day is $strWeekDay" (EDIT later: upgraded version of this script <noindex><a href="https://forum.mikrotik.com/viewtopic.php?p=960070#p960070)" target="_blank" rel="nofollow" >https://forum.mikrotik.com/viewtopic.php?p=960070#p960070)</a></noindex> Следующий шаг – преобразовать все в три отдельные функции: date2iso, date2epoch, date2weekday. Функция для проверки, является ли год високосным или нет, не нужна. (просто проверьте, верно ли ((($checkYear - 1968) % 4) = 0) или нет) Функции уже должны внутренне проверять, является ли переданная дата допустимой, и принимать любой “тип формата лога”. <br />
			<i>01.09.2021 21:42:00, rextended.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285966</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285966</guid>
			<pubDate>Wed, 01 Sep 2021 21:42:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285965">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Отличный улов, исправил исходный пост. <br />
			<i>21.06.2020 14:35:00, Jotne.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285965</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285965</guid>
			<pubDate>Sun, 21 Jun 2020 14:35:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285964">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			“dec” в этой строке: else={<br /> &nbsp; &nbsp;:set months {"an"=0;"eb"=31;"ar"=59;"pr"=90;"ay"=120;"un"=151;"ul"=181;"ug"=212;"ep"=243;"ct"=273;"ov"=304;"dec"=334}<br />} нужно заменить на “ec”: else={<br /> &nbsp; &nbsp;:set months {"an"=0;"eb"=31;"ar"=59;"pr"=90;"ay"=120;"un"=151;"ul"=181;"ug"=212;"ep"=243;"ct"=273;"ov"=304;"ec"=334}<br />} <br />
			<i>21.06.2020 14:05:00, colin.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285964</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285964</guid>
			<pubDate>Sun, 21 Jun 2020 14:05:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285963">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Вот обновленная версия, которую можно использовать как для получения текущего времени, так и для преобразования данных из входных данных. Пример текущего времени: put [$EpochTime]<br />1588597644 Преобразование времени: put [$EpochTime "may/01 16:23:50"]<br />1588343030<br /><br />EpochTime "15:23:50"]<br />1588598630 Если дата не указана, используется текущий день/месяц/год: global EpochTime do={<br />	# Использование<br />	# $EpochTime [входные данные времени]<br />	# -----<br />	# Получить текущее время<br />	# :put [$EpochTime]<br />	# <br />	# Прочитать время лога в одном из этих двух форматов "may/01 16:23:50" или "12:02:23" для номера лога *323<br />	# :put [$EpochTime [:log get *323 time]]<br /><br />	:local ds<br />	:local ts<br />	:if ([:len $1]=0) do={<br />		# Получить "текущее время"<br />		:set ds [/system clock get date]<br />		:set ts [/system clock get time]<br />	} else={<br />	<br />		if ([:len $1]&gt;8) do={<br />			# Использовать удаленную дату и время и преобразовать дату<br />			:set ds "$[:pick $1 0 6]/$[:pick [/system clock get date] 7 11]"<br />			:set ts [:pick $1 7 15]<br />		} else={<br />			# Использовать удаленное время и получить дату<br />			:set ds [/system clock get date]<br />			:set ts $1<br />		}<br />	}<br />	:local months<br />	:if ((([:pick $ds 9 11]-1)/4) != (([:pick $ds 9 11])/4)) do={<br /><br />		:set months {"an"=0;"eb"=31;"ar"=60;"pr"=91;"ay"=121;"un"=152;"ul"=182;"ug"=213;"ep"=244;"ct"=274;"ov"=305;"ec"=335}<br />	} else={<br />		:set months {"an"=0;"eb"=31;"ar"=59;"pr"=90;"ay"=120;"un"=151;"ul"=181;"ug"=212;"ep"=243;"ct"=273;"ov"=304;"ec"=334}<br />	}<br />	:set ds (([:pick $ds 9 11]*365)+(([:pick $ds 9 11]-1)/4)+($months-&gt;[:pick $ds 1 3])+[:pick $ds 4 6])<br />	:set ts (([:pick $ts 0 2]*60*60)+([:pick $ts 3 5]*60)+[:pick $ts 6 8])<br />	:return ($ds*24*60*60 + $ts + 946684800 - [/system clock get gmt-offset])<br />} НБ, не уверен, как это обрабатывает лог вокруг смены года, когда год отсутствует. НБ временной лаг год 2100, 2200 и т.д. не обрабатываются. Но это не должно быть проблемой. <br />
			<i>04.05.2020 13:09:00, Jotne.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285963</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285963</guid>
			<pubDate>Mon, 04 May 2020 13:09:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285962">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Спасибо за скрипт. Я жаловался в техподдержку MikroTik по этому поводу. Подобные вещи должны быть встроены в RouterOS. Сейчас так невозможно работать со временем в RouterOS. Например, в CLI посмотрите на время в логах. Для событий, произошедших меньше 24 часа, отображается только время. Для событий, произошедших больше 24 часа, отображается месяц в тексте и дата + время. Как же тогда что-то рассчитывать по этому? Невозможно... Этот скрипт можно использовать для времени в логах? /log print detail time=apr/29 21:05:26 topics=system,error,critical message=“login failure for user xxxx from 192.168.10.178 via ssh” Мне бы хотелось видеть это время в формате epoc, а не apr/29 21:05:26.<br /><br />PS, не нужно ставить точку с запятой ; после каждой строки, только между несколькими командами в одной строке. Этот скрипт считает 2100 как високосный год, но это не так. Так далеко в будущем, что это не должно быть проблемой. <br />
			<i>04.05.2020 07:24:00, Jotne.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285962</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285962</guid>
			<pubDate>Mon, 04 May 2020 07:24:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285961">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Мой вариант epoch time, кажется, самый короткий =) :global EpochTime do={<br /> &nbsp; :local ds [/system clock get date];<br /> &nbsp; :local months;<br /> &nbsp; :if ((([:pick $ds 9 11]-1)/4) != (([:pick $ds 9 11])/4)) do={<br /> &nbsp; &nbsp; &nbsp;:set months {"an"=0;"eb"=31;"ar"=60;"pr"=91;"ay"=121;"un"=152;"ul"=182;"ug"=213;"ep"=244;"ct"=274;"ov"=305;"ec"=335};<br /> &nbsp; } else={<br /> &nbsp; &nbsp; &nbsp;:set months {"an"=0;"eb"=31;"ar"=59;"pr"=90;"ay"=120;"un"=151;"ul"=181;"ug"=212;"ep"=243;"ct"=273;"ov"=304;"dec"=334};<br /> &nbsp; }<br /> &nbsp; :set ds (([:pick $ds 9 11]*365)+(([:pick $ds 9 11]-1)/4)+($months-&gt;[:pick $ds 1 3])+[:pick $ds 4 6]);<br /> &nbsp; :local ts [/system clock get time];<br /> &nbsp; :set ts (([:pick $ts 0 2]*60*60)+([:pick $ts 3 5]*60)+[:pick $ts 6 8]);<br /> &nbsp; :return ($ds*24*60*60 + $ts + 946684800 - [/system clock get gmt-offset]);<br />} Как использовать: :put [$EpochTime] <br />1588575464 <br />
			<i>04.05.2020 07:05:00, minks.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285961</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285961</guid>
			<pubDate>Mon, 04 May 2020 07:05:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285960">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Привет! Я работаю над скриптами автоматизации, которым также нужен unix timestamp. Вот мои предварительные функции:<br /><br />:global "parse_date" do={<br /> &nbsp;:local year [:pick $str 7 11]<br /> &nbsp;:local month [:find [:toarray "jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec"] [:pick $str 0 3]]<br /> &nbsp;:local day [:pick $str 4 6]<br /><br /> &nbsp;:set month ($month - 1)<br /> &nbsp;:if ($month &lt;= 0) do={<br /> &nbsp; &nbsp;:set month ($month + 12)<br /> &nbsp; &nbsp;:set year ($year - 1)<br /> &nbsp;}<br /><br /> &nbsp;:return ((<br /> &nbsp; &nbsp; &nbsp;365 * year + year / 4 - year / 100 + year / 400<br /> &nbsp; &nbsp;+ 367 * month / 12 - 30<br /> &nbsp; &nbsp;+ day - 1<br /> &nbsp; &nbsp;- 719527 + 31 + 28<br /> &nbsp; &nbsp;) * 86400)<br />}<br /><br />:global "parse_time" do={<br /> &nbsp;:local hour [:pick $str 0 2]<br /> &nbsp;:local min [:pick $str 3 5]<br /> &nbsp;:local sec [:pick $str 6 8]<br /> &nbsp;:return (hour * 3600 + min * 60 + sec)<br />}<br /><br />:global "parse_timestamp" do={<br /> &nbsp;:global "parse_date"<br /> &nbsp;:global "parse_time"<br /> &nbsp;:return ([$"parse_date" str=[:pick $str 0 11]] + [$"parse_time" str=[:pick $str 12 20]])<br />}<br /><br />:global "today" do={<br /> &nbsp;:global "parse_date"<br /> &nbsp;:return [$"parse_date" str=[/system clock get date]]<br />}<br /><br />:global "time" do={<br /> &nbsp;:global "parse_time"<br /> &nbsp;:return [$"parse_time" str=[/system clock get time]]<br />}<br /><br />:global "now" do={<br /> &nbsp;:global "today"<br /> &nbsp;:global "time"<br /> &nbsp;:return ([$"today"] + [$"time"])<br />} <br />
			<i>26.04.2019 16:18:00, zfuzesi.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285960</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285960</guid>
			<pubDate>Fri, 26 Apr 2019 16:18:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285959">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Привет. Огромное спасибо adeeadee! Этот скрипт мне очень помог. Использую его, когда переношу данные GPS на сайт мониторинга. С уважением. <br />
			<i>28.12.2018 11:36:00, itnot.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285959</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285959</guid>
			<pubDate>Fri, 28 Dec 2018 11:36:00 -0500</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285958">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Привет, значит, похоже, невозможно получить время в секундах с 1970-01-01 00:00:00 UTC напрямую в RouterOS? Нужно посчитать время сессии пользователей, а парсить время из rsyslog с точностью выше, чем дата +%s, сложнее. <br />
			<i>30.10.2013 10:27:00, januszzz.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285958</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285958</guid>
			<pubDate>Wed, 30 Oct 2013 10:27:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285957">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Стоит сделать. <br />
			<i>04.05.2020 19:25:00, Jotne.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285957</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285957</guid>
			<pubDate>Mon, 04 May 2020 19:25:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285956">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Конечно, я уже несколько лет создаю "крайне сжатую версию" для периода между 2000 и 2099 годами. Но для моих целей этого вполне достаточно =) <br />
			<i>04.05.2020 16:48:00, minks.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285956</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285956</guid>
			<pubDate>Mon, 04 May 2020 16:48:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
		<item>
			<title>Сделал! Написал скрипт для вычисления UNIX time!</title>
			<description><![CDATA[<b><a href="http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285955">Сделал! Написал скрипт для вычисления UNIX time!</a></b> <i>RouterOS</i> в форуме <a href="http://mikrotik.moscow/forum/forum57/">RouterOS</a>. <br />
			Находишь этот скрипт полезным? Да Нет Может быть, не знаю 0 голосов.<br /><br />Привет! С версии 6.2 я пытаюсь создать скрипт для вычисления UNIX-времени (эпохальное время / POSIX-время) из текущей даты/времени RB. Скрипт содержит 2 функции: первая — JD, которая вычисляет Юлианские дни для указанной даты, а вторая — вычисляет UNIX-время на основе разницы между Юлианскими днями и Юлианской датой «01/01/1970». Думаю, он не идеален, но вот он:<br /><br />:global fncJD do={<br />:local months [:toarray "jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec"];<br />:local jd<br />:local M [:pick $1 0 3];<br />:local D [:pick $1 4 6];<br />:local Y [:pick $1 7 11];<br />:for x from=0 to=([:len $months] - 1) do={<br /> &nbsp; :if ([:tostr [:pick $months $x]] = $M) do={:set M ($x + 1) }<br /> &nbsp; }<br />:if ( $M = 1 || $M = 2) do={<br /> &nbsp; &nbsp;:set Y ($Y-1);<br /> &nbsp; &nbsp;:set M ($M+12);<br />}<br />:local A ($Y/100)<br />:local B ($A/4)<br />:local C (2-$A+$B)<br />:local E ((($Y+4716) * 36525)/100)<br />:local F ((306001*($M+1))/10000)<br />:local jd ($C+$D+$E+$F-1525)<br />:return $jd<br />};<br /><br />:global timestamp do={<br />:global fncJD $fncJD<br />:local currtime [/system clock get time];<br />:local jdnow [$fncJD [/system clock get date]]<br />:local days ($jdnow - 2440587)<br />:local ore [:pick $currtime 0 2]<br />:local minute [:pick $currtime 3 5]<br />:local secunde [:pick $currtime 6 8]<br />:return (($days * 86400) + ($ore * 3600) + ($minute * 60) + $secunde - [/system clock get gmt-offset]);<br />}<br /><br />После запуска скрипта просто объяви глобальную функцию в твоем скрипте и выполни:<br />:global timestamp $timestamp<br />:put [$timestamp]<br /><br />Можешь всегда предлагать предложения или улучшения этого скрипта. <br />
			<i>07.08.2013 19:27:00, adeeadee.</i>]]></description>
			<link>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285955</link>
			<guid>http://mikrotik.moscow/forum/forum57/71640-sdelal_-napisal-skript-dlya-vychisleniya-unix-time/message285955</guid>
			<pubDate>Wed, 07 Aug 2013 19:27:00 -0400</pubDate>
			<category>RouterOS</category>
		</item>
	</channel>
</rss>
