вторник, 8 сентября 2015 г.

Определяем последний день текущего месяца.

  Иногда, например для отчетов с Mikrotik, нужно знать последний день текущего месяца -30, 31 или 28, 29( в феврале). Для этого нам поможет скрипт:
:global date
: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}
Скрипт выполняется каждый день. Если сегодня последний день месяца пишем в лог "1", если нет - пишем в лог "2". Естественно тут можно выполнять нужные именно вам команды. Так же глобальные переменные в начале можно заменить на локальные.

Подписаться на новые статьи.

1 комментарий:

  1. Не совсем точно. В григорианском календаре действует правило о високосном годе — год високосный, то есть содержит 366 дней, если:
    номер года кратен 400 (1600, 2000, 2400);
    остальные годы — номер года кратен 4 и не кратен 100 (… 1892, 1896, 1904, 1908 …);

    https://ru.wikipedia.org/wiki/Григорианский_календарь#Предпосылки_перехода_на_григорианский_календарь

    ОтветитьУдалить