La fonction pour obtenir la date et l'heure sur RouterOS est très simple
:date locale [/horloge système obtenir la date]
:heure locale [/l'horloge système obtient l'heure]
Mauvaise nouvelle, la variable $date contient la valeur « Dec/25/2018 » qui n'est pas très adaptée aux opérations de scripts. Ensuite si vous souhaitez obtenir un format plus adapté, comme par exemple 2018-12-25, il faut manipuler le contenu de la variable :
:date locale [/horloge système obtenir la date]
:jour local [ :pick $date 4 6 ]
:mois local [ :pick $date 0 3 ]
:année locale [ :pick $date 7 11 ]
Vous avez maintenant les bonnes valeurs dans les trois variables. Mais $mois vous donne « décembre », pas « 12 ». Vous devez convertir cet élément
:date locale [/horloge système obtenir la date];
:mois locaux {"jan"="01";"feb"="02";"mar"="03";"apr"="04";"may"="05";"jun"="06 ";"jul"="07";"aug"="08";"sep"="09";"oct"=10;"nov"=11;"dec"=12};
:jour local [:tonum [:pick $date 4 6]];:année locale [:tonum [:pick $date 7 11]];:mois local [:pick $date 0 3];:local mm (:$ mois->$mois);
:local newdate "$année-$mm-$jour";
Et voilà, la variable newdate contient désormais « 2018-12-25 ».
Les forums Mikrotik fournissent de nombreux exemples de manipulations de dates. L'exemple suivant fourni par BlackVS (ici) donne un bon aperçu de certaines possibilités de script avancées :
###func_shiftDate - ajoute des jours à ce jour
#Saisie : date, jours
#date - "1/jan/2017"
#jours - nombre
#correct uniquement pour les années >1918
#décommenter pour tester
# : date locale "01/01/2100"
# : jours locaux 2560
###
# : mettez "$date + $jours"
:jours locaux {31;28;31;30;31;30;31;31;30;31;30;31}
:mois locaux {"jan"=1;"feb"=2;"mar"=3;"apr"=4;"may"=5;"jun"=6;"jul"=7;"aug"= 8;"sept"=9;"oct"=10;"nov"=11;"déc"=12}
:local mois {"jan";"feb";"mar";"apr";"may";"jun";"jul";"aug";"sep";"oct";"nov";"dec "}
:local jj [:tonum [:pick $date 4 6]]
:local aa [:tonum [:pick $date 7 11]]
:mois local [:pick $date 0 3]
:local mm (:$mois->$mois)
:set jj ($jj+$jours)
:local dm [:pick $mdays ($mm-1)]
:if ($mm=2 && (($yy&3=0 && ($yy/100100 != $yy)) || $yy/400400=$yy) ) do={ :set dm 29 }
:while ($dd>$dm) do={
:set jj ($jj-$dm)
:définir mm ($mm+1)
:if ($mm>12) faire={
:définir mm 1
:set aa ($aa+1)
}
:set dm [:pick $mdays ($mm-1)]
:if ($mm=2 && (($yy&3=0 && ($yy/100100 != $yy)) || $yy/400400=$yy) ) do={ :set dm 29 }
} ;
:local res "$[:pick $monthr ($mm-1)]/"
:if ($dd<10) do={ :set res ($res."0") }
:set $res "$res$jj/$yy"
:retour $res
Avec cette fonction vous disposez d'une fonction qui peut être exécutée dans un autre script :
:local shiftDate [:parse [/system script get func_shiftDate source]]
:put [$shiftDate date="jan/01/2017" jours=256]
Vous devriez obtenir le « 14 septembre 2017 »