Forums Développement Multimédia

Aller au contenu

[résolu] Algorithme jour de la semaine

Director

7 réponses à ce sujet

#1 Psykoo

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 155 messages

Posté 02 July 2008 - 00:01 AM

Bonjour a tous,

J'ai besoin, dans mon projet, de savoir quelle journée de la semaine nous sommes. J'ai trouver plusieurs algorithmes sur le net mais je n'ai pas réussi à les faire fonctionner correctement.

Voiçi mon code :

Lingo



anne = _system.date().char[1..4]
mois = _system.date().char[6..7]
jour = _system.date().char[9..10]

if (mois>=03) then
ye = anne
ye4 = ye/4
d = ((mois*23)/9)-0.5 + jour + 4 + ye + ((ye/4)-0.5) - ((ye/100)-0.5) + ((ye/400)-0.5) - 2
else
ye = anne - 1
d = ((mois*23)/9)-0.5 + jour + 4 + ye + ((ye/4)-0.5) - ((ye/100)-0.5) + ((ye/400)-0.5)
end if

d = d mod 7


J'ai pris l'algorithme sur le site suivant


À vrai dire ça marche pour certains mois, certaines années. Mais ça ne marche pas toujours! Je suis persuadé que mon erreur se situ dans les chiffres à virgules de mon équation.

Si quelqu'un d'habitué avec les Floats, les Integers et autres opérateurs du genre aurait une idée pour AU moins faire marcher cette algorithme pour les 10 années à venir cela m'aiderais énormément!! gourou.gif

#2 bubarnet

  • Members
  • PipPipPipPipPipPipPipPip
  • 615 messages

Posté 02 July 2008 - 00:31 AM

Voilà l'algo que j'utilise, récupéré ... je sais plus où

Lingo


on GetWeekDay aDateObject,asInteger
if ilk(aDateObject)<>#date then
return #invalidDate
end if
vStartDate=date(17520914) --date minimum 14/09/1752
vElapsedDays=aDateObject-vStartDate
if vElapsedDays<0 then
if vElapsedDays<-11 then
-- Use the Julian calendar
vStartDate=date(0) -- 1 January 0
vElapsedDays=aDateObject-vStartDate
else
return #dateUndefined
end if
end if
vElapsedDays=vElapsedDays+3
vIndex=(vElapsedDays mod 7)+1
case asInteger of
TRUE,#integer:
return vIndex
otherwise
vDayName=GetDayNames(vIndex,FALSE)
return vDayName
end case
end

on GetDayNames iday,asAbbreviation
if asAbbreviation then
return ["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"][iday]
else
return ["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"][iday]
end if
end

pour l'utiliser

wd=getweekday(date(annee,mois,jour),TRUE) --TRUE retourne le numéro du jour, FALSE le nom du jour

#3 Psykoo

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 155 messages

Posté 02 July 2008 - 17:47 PM

Je comprend pas trop comment ton script fonctionne... tu pourrais expliquer un peu?

J'ai copier/coller ton code sur le frame 1 et ajouter la ligne que tu m'à dis :

Lingo

 
wd = getweekday(date(annee ,mois ,jour),TRUE)
put wd


Maintenant plein d'erreurs du genre "Handler definition expected" surviennent.

Je m'y connais pas trop en ce qui attrait les fonctions personnalisées. Faut-elles les mettre à un endroit en particulier?

Ou y'aurais pas un code plus simple un peu?

Modifié par Psykoo, 02 July 2008 - 17:52 PM.


#4 bubarnet

  • Members
  • PipPipPipPipPipPipPipPip
  • 615 messages

Posté 02 July 2008 - 18:08 PM

Tu mets "mon" bout de code dans un script d'animation.

Ensuite, à n'importe quel moment où tu veux l'appeler, tu tapes
wd = getweekday(date(annee ,mois ,jour),TRUE)

EN REMPLACANT annee, mois et jour par les veleurs que tu veux smile.gif

wd = getweekday(date(2008,7,2),TRUE)

#5 Psykoo

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 155 messages

Posté 02 July 2008 - 19:12 PM

gourou.gif gourou.gif

Merci beaucoup!

#6 glurp

    Modérateur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 1260 messages

Posté 16 August 2011 - 14:21 PM

Hello les gens,

Je ressors ce vieux post du placard parce qu'en utilisant la solution de bubarnet j'obtiens "lundi" à la date d'aujourd'hui...

Une idée ?


  tDate = date()
  the itemDelimiter = "/"
  tMonthes = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
  tMonth = tMonthes[integer(tDate.item[2])]
  tDay = GetWeekDay(date(integer(tDate.item[3]), integer(tDate.item[2]), integer(tDate.item[1])))
 
  member("date_txt").text = tDay&&integer(tDate.item[1])&&tMonth&&integer(tDate.item[3])&RETURN&(time())
 


#7 bubarnet

  • Members
  • PipPipPipPipPipPipPipPip
  • 615 messages

Posté 16 August 2011 - 15:59 PM

Effectivement, il y a un décalage entre le script que j'ai écrit et celui que j'utilise (j'avais modifié mon script original pour pouvoir l'écrire ici simplement ... et je me suis planté :oops: ).
La fonction renvoie 1 pour lundi (et non dimanche). Il faut donc modifier la fonction


on GetDayNames iday,asAbbreviation
  if asAbbreviation then
    return [Lun","Mar","Mer","Jeu","Ven","Sam","Dim"][iday]
  else
    return ["
Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"][iday]
  end if
end


#8 glurp

    Modérateur

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 1260 messages

Posté 16 August 2011 - 16:35 PM

Super, merci bubarnet !

Tu viens de me faire gagner un temps précieux ;)



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP