Classer les jours du Mois par nom
(Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche)
Ce script permet de classer les jours du mois par le nom du jour.
le but de ce script est de permettre de retrouver le x jour d'un mois ou tous les jours qui ont le même nom
Exemple :
je veux le 3 mardi du mois
je veux tous les jeudi du mois
Si vous sauvegardez la table Jours dans une variable globale il faudra exécuter ce script tous les 01 de chaque mois vers 00h01
----------------------------------------------------------------------
-- Calcul du nombre de jours dans le mois
----------------------------------------------------------------------
-- Si année bissextile
local function bissextile(Annee)
return Annee % 4 == 0 and (Annee % 100 ~= 0 or Annee % 400 == 0)
end
-- Nombre de jours dans le mois
function JourDansMois(Mois, Annee)
return Mois == 2 and bissextile(Annee) and 29
or ("\31\28\31\30\31\30\31\31\30\31\30\31"):byte(Mois)
end
----------------------------------------------------------------------
-- Initialisation des variables et creation des tables
----------------------------------------------------------------------
local MoisAnnee = os.date("*t")
local mois = MoisAnnee.month -- recuperation du mois en cours
local annee = MoisAnnee.year -- recuperation de l'annee en cours
local Jmois = JourDansMois(mois, annee) -- calcul le nombre de jour dans le mois en cours
local Jours = {["Lundi"]={}, ["Mardi"]={}, ["Mercredi"]={}, ["Jeudi"]={}, ["Vendredi"]={}, ["Samedi"]={}, ["Dimanche"]={}}
local JourNom = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"}
----------------------------------------------------------------------------------
for jour = 1,Jmois do
local tmpdate = (os.time{year = annee, month = mois, day = jour})
local tmpJourMois = os.date("%d", tmpdate) -- recupere le jour du mois
local tmpJourSemaine = tonumber(os.date("%u", tmpdate)) -- Numero du jour de la de semaine
local tmpJourNom = JourNom[tmpJourSemaine] -- recupere le nom du jour en francais
table.insert(Jours[tmpJourNom], tmpJourMois)
--fibaro:debug("Jour = "..tmpJourMois.." "..tmpJourNom)
end
-----------------------------------------------------------------------
-- Affichage
-----------------------------------------------------------------------
print(os.date("Aujourd'hui, nous sommes un %A"))
fibaro:debug("Nombre de Jours dans le mois "..Jmois)
for i = 1,7 do
local jour = JourNom[i]
fibaro:debug(jour)
for j = 1,#Jours[jour] do
fibaro:debug(Jours[jour][j])
end
end
-- Exemple d'utilisation
-- Ici on affiche le 2 lundi du mois
local toto = "Lundi"
fibaro:debug(Jours[toto][2])
-- ici on affiche le 3 lundi du mois
fibaro:debug(Jours.Mardi[3])
On peut sauvegarder la table Jours dans une variable globale afin de l'utiliser dans d'autres scripts (il faudra créer la variable globale)
-- Sauvegarde des jours de la semaine dans la variable globale JoursSemaine
fibaro:setGlobal('JoursSemaine',json.encode(Jours))
On peut récuperer cette table dans un autre script
-- Récupération des jours de la semaine de la variable globale JoursSemaine
Jours=json.decode((fibaro:getGlobal('JoursSemaine')));
Utilisation dans un Script
-------------------------------------
-- Exemple d'utilisation --
-------------------------------------
-- Ici on affiche le 2 lundi du mois
local toto = "Lundi"
--Affichage
fibaro:debug(Jours[toto][2])
----------------------------------------------------------------------------------------------
-- ici on affiche le 3 Vendredi du mois
local Vendredi3 = Jours.Vendredi[3]
--Affichage
fibaro:debug(Vendredi3)
----------------------------------------------------------------------------------------------
-- Ici on récupere tous les mardi du mois sous forme de table
local Mardi = Jours.Mardi
--Affichage
for i = 1,#Mardi do
fibaro:debug(Mardi[i])
end
----------------------------------------------------------------------------------------------
-- Connaitre le nombre de Samedi dans le mois
local NombreSamedi = #Jours.Samedi
--Affichage
fibaro:debug("Nombre de mardi = "..NombreSamedi)
----------------------------------------------------------------------------------------------
--Recuperer le 3 et 4 jeudi du mois
local Jeudi = {Jours.Jeudi[3], Jours.Jeudi[4]}
--Affichage
for i = 1,#Jeudi do
fibaro:debug("Jeudi "..Jeudi[i])
end
Voici une version Virtual Device :
Fichiers virtual device : Jours_Semaine.vfib