Aller au contenu

Trouver Le 2Eme Mercredi De Chaque Mois


Sakkhho

Messages recommandés

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
Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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) 

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...