Comment comparer deux dates ?

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Nicogluck
Messages : 112
Inscription : 24 nov. 2014, 14:54

Comment comparer deux dates ?

Message par Nicogluck »

Bonjour à tous,

Un script LUA m'a bien pris la tête car j'avais une comparaison de date qui ne marchait pas, du genre :
local date_du_jour = os.date("%d/%m/%Y")
if date_du_jour >= uservariables['date_limite']
then
(...)

Ma variable date_limite est une date prédéfinie au format DD/MM/YYYY.

J'ai finalement remarqué que ça ne comparait que le jour sans tenir compte du mois ni de l'année.
Donc, y a-t-il un moyen de faire simple avec une fonction toute faite ou bien faut-il faire une série de comparaison de l'année, puis du mois, puis du jour ? Ça me paraît bien lourd à mettre en place, mais bon, je le ferai si je n'ai pas le choix.

Merci !
Synology DS415play / RFXCom / récepteurs 433 / sondes temp+hygro Oregon / cartes relais Sainsmart
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Comment comparer deux dates ?

Message par vil1driver »

salut,
inspire toi de ceci

Code : Tout sélectionner

function timedifference(d)
	s = otherdevices_lastupdate[d]
	year = string.sub(s, 1, 4)
	month = string.sub(s, 6, 7)
	day = string.sub(s, 9, 10)
	hour = string.sub(s, 12, 13)
	minutes = string.sub(s, 15, 16)
	seconds = string.sub(s, 18, 19)
	t1 = os.time()
	t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
	difference = os.difftime (t1, t2)
	return difference
end
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Nicogluck
Messages : 112
Inscription : 24 nov. 2014, 14:54

Re: Comment comparer deux dates ?

Message par Nicogluck »

Merci vil1driver, mais comment s'en servir ?

Dois-je faire quelque chose du genre :
if date_du_jour >= timedifference(uservariables['date_limite'])
Synology DS415play / RFXCom / récepteurs 433 / sondes temp+hygro Oregon / cartes relais Sainsmart
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Comment comparer deux dates ?

Message par vil1driver »

je la refais..

la fonction renvoie le nombre de secondes qui séparent la date de la variable et maintenant
si la date est passée, la valeur retournée sera négative.

Code : Tout sélectionner

function timedifference(s)
   
   year = string.sub(s, 1, 4)
   month = string.sub(s, 6, 7)
   day = string.sub(s, 9, 10)
   
   t1 = os.time()
   t2 = os.time{year=year, month=month, day=day, hour=00, min=00, sec=00}
   difference = os.difftime (t1, t2)
   return difference
end

commandArray = {}


if (timedifference(uservariables['date_limite']) < 0) then

-- blablabal ..

end

return commandArray 


MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Nicogluck
Messages : 112
Inscription : 24 nov. 2014, 14:54

Re: Comment comparer deux dates ?

Message par Nicogluck »

Ca marche nickel, merci (encore une fois) !

J'avais mal estimé l'erreur en réalité.
Il faut effectivement la fonction entière telle que tu l'as décrite, et non directement utiliser la commande os.difftime(t2,t1) car des variables utilisateur configurées comme des dates sont finalement considérées comme des strings.

Merci beaucoup !
Problème résolu.
Synology DS415play / RFXCom / récepteurs 433 / sondes temp+hygro Oregon / cartes relais Sainsmart
Martin
Messages : 1
Inscription : 25 avr. 2017, 18:24

Re: Comment comparer deux dates ?

Message par Martin »

Bonjour,

désolé je suis néophyte et je ne comprend pas votre solution.

Comme vous, je cherche à exécuter une fonction si la date est dépassée. J'ai donc ce code :

--------------------------------------------------
-- DEFINITION DES VARIABLES LOCALES / RACCOURCIS
--------------------------------------------------

local speed = 0.03
local sleep = gma.sleep;
local cmd = gma.cmd;
local fbk = gma.feedback;
local date_limite ={2017,04,23}

local BlindEdit, timedifference;

timedifference = function (s)

year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)

t1 = os.time()
t2 = os.time{year=year, month=month, day=day}
difference = os.difftime (t1, t2)
return difference

end


BlindEdit = function{}

if (timedifference(uservariables['date_limite']) < 0) then

cmd('blindedit on');
end
return BlindEditl;

Mais cela ne marche et je ne trouve pas de solution.

Cordialement
Répondre