Aller au contenu

Trouver Le 2Eme Mercredi De Chaque Mois


Messages recommandés

Posté(e)

Bonjour,

 

Pour faire des annonces TTS, j'aimerai pouvoir identifier les 2 et 4eme mercredi de chaque mois ?

mais pas vraiment d'idée pour savoir comment faire ...

avez vous déjà  codé quelque chose dans le style ?

 

merci

Posté(e)

il faut que tu utilises os.date sous forme de table

tu fais un boucle sur le mois et tu comptes les mercredi je crois que c'est 3 pour le mercredi

t = os.date('*t')  -- time now
> table.foreach(os.date('*t'), print)
hour    15
min     1
wday    1
year    2003
yday    124
month   5
sec     2
day     3 -- Mercredi
isdst   true
Posté(e)

merci mais pas compris ta boucle  :wacko:  et pourtant j'ai pas commencé l'apéro :-) désolé

Je souhaite lancer un message TTS, si nous sommes le 2eme ou 4eme mercredi du mois.

Posté(e)

Bon je te donne une solution

 

On récupere les mercredis du mois dans une table Mercredi

 

il suffisait de regarder les exemples ici : http://lua-users.org/wiki/DayOfWeekAndDaysInMonthExample

----------------------------------------------------------------------
-- Calcul du nombres de jours dans le mois
----------------------------------------------------------------------

-- Si année bissextile
local function bissextile(year)
    return year % 4 == 0 and (year % 100 ~= 0 or year % 400 == 0)
end
-- Nombre de jours dans le mois
function JourDansMois(month, year)
    return month == 2 and bissextile(year) and 29
           or ("\31\28\31\30\31\30\31\31\30\31\30\31"):byte(month)
end

print(os.date("Aujourd'hui, nous sommes un %A"))

local MoisAnnee = os.date("*t")
local mois = MoisAnnee.month
local annee = MoisAnnee.year
local Jmois = JourDansMois(mois, annee)
fibaro:debug("Jour dans le mois "..Jmois)
local Mercredi = {}
for jour = 1,Jmois do
    local tmpdate = (os.time{year = annee, month = mois, day = jour})
    local tmpJourChiffre = os.date("%d", tmpdate)
    local tmpJourNom = os.date("%a", tmpdate)
    if tmpJourNom == "Wed" then -- Si mercredi ajout dans la table Mercredi
       table.insert(Mercredi, tmpJourChiffre)
    end
    -- fibaro:debug("Jour = "..tmpJourChiffre.."  "..tmpJourNom)
end
for i = 1,#Mercredi do
   print (Mercredi[i])
end

si tu veux le 2 mercredi

print (Mercredi[2])

Voila Monsieur

  • Upvote 2
Posté(e)

La je sais pas pour le print avec le debug cela fonctionne ?

 

Tu as donc une table avec tous les mercredi il suffit que tu choisisses ceux que tu veux. Il y avait plus simple mais j'ai préféré cette méthode car plus générique

Posté(e)

oui j'ai fait ca

----------------------------------------------------------------------
-- Identifier le numero du jour dans le mois
----------------------------------------------------------------------
 
-- Si année bissextile
local function bissextile(year)
    return year % 4 == 0 and (year % 100 ~= 0 or year % 400 == 0)
end
-- Nombre de jours dans le mois
function JourDansMois(month, year)
    return month == 2 and bissextile(year) and 29
           or ("\31\28\31\30\31\30\31\31\30\31\30\31"):byte(month)
end
 
print(os.date("Aujourd'hui, nous sommes un %A"))

local MoisAnnee = os.date("*t")
local mois = MoisAnnee.month
local annee = MoisAnnee.year
local Jmois = JourDansMois(mois, annee)
fibaro:debug("Jour dans le mois "..Jmois)
local Mardi = {}
local Jeudi = {}
for jour = 1,Jmois do
    local tmpdate = (os.time{year = annee, month = mois, day = jour})
    local tmpJourChiffre = os.date("%d", tmpdate)
    local tmpJourNom = os.date("%a", tmpdate)
    if tmpJourNom == "Tue" then -- Si Mardi ajout dans la table Mardi
       table.insert(Mardi, tmpJourChiffre)
    end
    if tmpJourNom == "Thu" then -- Si Jeudi ajout dans la table Jeudi
       table.insert(Jeudi, tmpJourChiffre)
    end
    -- fibaro:debug("Jour = "..tmpJourChiffre.."  "..tmpJourNom)
end

fibaro:debug(os.date("Aujourd'hui, nous sommes le %A, %d"))

fibaro:debug("Les Mardi de ce mois :")
for i = 1,#Mardi do
   print (Mardi[i])
   fibaro:debug(Mardi[i])
end
fibaro:debug("Les Jeudi de ce mois :")
for i = 1,#Jeudi do
   print (Jeudi[i])
   fibaro:debug(Jeudi[i])
end

local Mardi2 = print (Mardi[2])
local Mardi4 = print (Mardi[4])
if (os.date("%d")+1) == Mardi2 then  fibaro:setGlobal("SortirVerres", "Yes")
elseif (os.date("%d")+1) == Mardi4 then fibaro:setGlobal("SortirVerres", "Yes")
else fibaro:setGlobal("SortirVerres", "No")
end

local Jeudi2 = print (Jeudi[2])
if (os.date("%d")+1) == Jeudi2 then fibaro:setGlobal("SortirEncombrants", "Yes")
else fibaro:setGlobal("SortirEncombrants", "No")
end

et avec GEA derrière

   GEA.add({"Global", "SortirVerres", "Yes"}, 60, "", {{"Time", "20:00", "20:01"},{"VirtualDevice", id["SONOS_REMOTE"], 33}}) -- Annonce TTS5 (Verres) 
    GEA.add({"Global", "SortirEncombrants", "Yes"}, 60, "", {{"Time", "20:00", "20:01"},{"VirtualDevice", id["SONOS_REMOTE"], 34}}) -- Annonce TTS6 (Encombrants) 

Posté(e)

je pense que cela suffirai

if (os.date("%d")+1) == Mardi[2] then  fibaro:setGlobal("SortirVerres", "Yes")

Pas besoin de cela

local Mardi2 = print (Mardi[2])

en fait tu as une table Mardi avec comme valeur

Exemple :

Mardi = {5, 12, 19, 26}

 

Donc si tu veux le 2 mardi tu mets Mardi[2] qui te retourne la valeur 12 dans cette exemple

  • Upvote 1
Posté(e)

Je viens de m'amuser a faire un variante pour tout les jours de la semaine sans if then donc plus optimisé

----------------------------------------------------------------------
-- Calcul du nombres de jours dans le mois
----------------------------------------------------------------------

-- Si année bissextile
local function bissextile(year)
    return year % 4 == 0 and (year % 100 ~= 0 or year % 400 == 0)
end
-- Nombre de jours dans le mois
function JourDansMois(month, year)
    return month == 2 and bissextile(year) and 29
           or ("\31\28\31\30\31\30\31\31\30\31\30\31"):byte(month)
end

print(os.date("Aujourd'hui, nous sommes un %A"))

local MoisAnnee = os.date("*t")

local mois = MoisAnnee.month
local annee = MoisAnnee.year
local Jmois = JourDansMois(mois, annee)
fibaro:debug("Jour dans le mois "..Jmois)
local Jours = {{}, {}, {}, {}, {}, {}, {}}
for jour = 1,Jmois do
    local tmpdate = (os.time{year = annee, month = mois, day = jour})
    local tmpJourChiffre = os.date("%d", tmpdate)
    local tmpJourNom = tonumber(os.date("%u", tmpdate))
    table.insert(Jours[tmpJourNom], tmpJourChiffre)
    --fibaro:debug("Jour = "..tmpJourChiffre.."  "..tmpJourNom)
end

----------------------------------------------------------------------
-- Affichage
-----------------------------------------------------------------------
local JourNom = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"}

for i = 1,#Jours do
   fibaro:debug(JourNom[i])
   for j = 1,#Jours[i] do
      fibaro:debug(Jours[i][j])
   end
end

1 = Lundi, 2 = Mardi etc...

 

Pour récuperer le 3 mardi du mois exemple

fibaro:debug(Jours[2][3])

pour avoir le nom du jour devant la date

fibaro:debug(JourNom[2].." "..Jours[2][3])
  • Upvote 1
×
×
  • Créer...