Иногда, например для отчетов с Mikrotik, нужно знать последний день текущего месяца -30, 31 или 28, 29( в феврале). Для этого нам поможет скрипт:
:global dateСкрипт выполняется каждый день. Если сегодня последний день месяца пишем в лог "1", если нет - пишем в лог "2". Естественно тут можно выполнять нужные именно вам команды. Так же глобальные переменные в начале можно заменить на локальные.
:global day
:global month
:global year
:global yeardiv
:global yearmult
:global leapyear
:global lastday
:global found
:set date [system clock get date]
:set month [:pick $date 0 3]
:set day [:pick $date 4 6]
:set year [:pick $date 7 11]
:set yeardiv ($year / 4)
:set yearmult ($yeardiv * 4)
:if ([$yearmult] = $year) do={ :set leapyear true } else={ :set leapyear false }
:if ([$month] = "jan") do={ :set lastday 31 }
:if ([$month] = "feb") do={
:if ($leapyear = true) do={ :set lastday 29 }
:if ($leapyear = false) do={ :set lastday 28 } }
:if ([$month] = "mar") do={ :set lastday 31 }
:if ([$month] = "apr") do={ :set lastday 30 }
:if ([$month] = "may") do={ :set lastday 31 }
:if ([$month] = "jun") do={ :set lastday 30 }
:if ([$month] = "jul") do={ :set lastday 31 }
:if ([$month] = "aug") do={ :set lastday 31 }
:if ([$month] = "sep") do={ :set lastday 30 }
:if ([$month] = "oct") do={ :set lastday 31 }
:if ([$month] = "nov") do={ :set lastday 30 }
:if ([$month] = "dec") do={ :set lastday 31 }
:if ([$lastday] = $day) do={log info 1} else={log info 2}
Не совсем точно. В григорианском календаре действует правило о високосном годе — год високосный, то есть содержит 366 дней, если:
ОтветитьУдалитьномер года кратен 400 (1600, 2000, 2400);
остальные годы — номер года кратен 4 и не кратен 100 (… 1892, 1896, 1904, 1908 …);
https://ru.wikipedia.org/wiki/Григорианский_календарь#Предпосылки_перехода_на_григорианский_календарь