Les dates, calcule de jour [Résolu]

Signaler
Messages postés
145
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
6 juin 2010
-
Messages postés
145
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
6 juin 2010
-
Bonjour,

un petit probleme je voudrais programmer une date futur dans le temps tous les premier Mercredi du mois d'aout tous les ans !

J'ai reussi qu'a faire ca
<?php

$jour = 3;
$mois = 8;
$annee = 2005;
echo
("Le $jour $mois $annee tombe un " . date("l", mktime(0, 0, 0, $mois, $jour, $annee)));
?>


La je recupere le JOUR de la semaine et je voudrais faire le contraire

merci a tous axel

26 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Voila :



<?php

for ($i = 2005; $i < 2010; $i ++) {

for ($j = 1; $j < 13; $j ++) {

for ($k = 1; $k < 7; $k ++) {

$jour = date ('l', mktime(0,0,0,$j, $k, $i));

if ($jour == 'Wednesday')


echo date('l.d.m.y', mktime(0,0,0,$j, $k, $i)),
'
';

}

}

}



?>



j'avais inverse les jours et les mois.

A priori ca fonctionnem, j'ai verifie les 2 premieres dates sorties.

mais faut optimiser, c'est moche...
Messages postés
208
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2008

Code corrigé:



$correspondance=array(4,3,2,1,7,6,5);



for($annee=2000;$annee<2010;$annee++)

{

$resultat=mktime(0,0,0,8,$correspondance[(int)date('w',mktime(0,0,0,8,1,$annee))],$annee);

print(date('d/m/Y',$resultat).'
');

}



Ce programme te retourne tous les dates entre l'annee 2000 et 2009 correspondant au premier mercredi du mois d'aout



resultat:

02/08/2000

01/08/2001

07/08/2002

06/08/2003

04/08/2004

03/08/2005

02/08/2006

01/08/2007

06/08/2008

05/08/2009



Si jamais tu ne veut pas que la date soit au format d/m/D regarde la doc de la fonction date()
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
En d'autres termes :

for($annee=2000;$annee<2010;$annee++)
{
$jourSemainePremierAout=date('w',mktime(0,0,0,8,1,$annee));
$jourMoisPremierMercredi=(10-$jourSemainePremierAout)%7+1; //10=(7jours par semaine -1) + 4(position mercredi)
$resultat=mktime(0,0,0,8,$jourMoisPremierMercredi,$annee);
print(date('d/m/Y',$resultat).'
');
}

Très bon script Tardigrade ! efficace et concis, j'aime bien !

A+
Arno
Messages postés
208
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2008

en utilisant le code de :



function aquewel($mois,$annee,$joursemaine,$positionsemaine)

{

$jourSemainePremierAout=date('w',mktime(0,0,0,$mois,1,$annee));


$jourMoisPremierMercredi=(7+$joursemaine-$jourSemainePremierAout)%7+1+7*($positionsemaine-1);

return mktime(0,0,0,$mois,$jourMoisPremierMercredi,$annee);

}



//premier mercredi d'aout

for($annee=2000;$annee<2010;$annee++)

{

print(date('d/m/Y',aquewel(8,$annee,3,1)).'
');

}



print('
');



//premier lundi de janvier tous les deux ans

for($annee=2000;$annee<2010;$annee+=2)

{

print(date('d/m/Y',aquewel(1,$annee,1,1)).'
');

}



print('
');



//deuxieme lundi de janvier tous les deux ans

for($annee=2000;$annee<2010;$annee+=2)

{

print(date('d/m/Y',aquewel(1,$annee,1,2)).'
');

}
Messages postés
208
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2008

$correspondance=array(3,2,1,7,6,5,2);



for($annee=2000;$annee<2010;$annee++)

{

$resultat=mktime(0,0,0,8,$correspondance[(int)date('w',mktime(0,0,0,8,1,$annee))],$annee);

print(date(
'h-i-s, j-m-y, it is w Day z '
,$resultat).'
');

}



code non teste
Messages postés
208
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2008

premiere erreur : $correspondance=array(3,2,1,7,6,5,4);
Messages postés
145
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
6 juin 2010

j'ai pas compris ce script ????? un petit commentaire ?
Messages postés
145
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
6 juin 2010

ce script me donne le premier JOUR des mois d'aout tous les ans
moi je veux la DATE
Messages postés
208
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2008

$resultat est une date apres tu en fais ce que tu veux mais c'est bien une date
Messages postés
208
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2008

je le teste au boulot aujourd'hui mais normalement le script te
retourne la date correspondant au premier mercredi du mois d'aout pour
une annee donnée
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
hello,



<?php

for ($i = 2005; $i < 2010; $i ++) {

for ($j = 1; $j < 13; $j ++) {

for ($k = 1; $k < 7; $k ++) {

$jour = date ('l', mktime(0,0,0,$k, $j, $i));

if ($jour == 'Wednesday')


echo date('l.d.m.y', mktime(0,0,0,$k, $j, $i)),
'
';

}

}

}



?>



Bon apres tu mets en forme hein et tu optimises, c'est fait a la va vite...
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Ah ben tellement a la va vite que c'est faux, lol, desole.
Messages postés
208
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2008

pq faire simple quand on peut faire compliquer
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Parce que j'ai mal lu la question, je lui ai sorti tous les mercredi de chaque mois de tous les ans, en fait...
Messages postés
145
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
6 juin 2010

le array $correspondance
correspond a koi parce que je voudrais faire un systeme de periodicite avec aussi les mois les semaines et tout ..????
Messages postés
208
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2008

date(w) retourne le jour de la semaine en numerique (0 à 6) de la date
courante 0 = dimanche normal puisque il gere les date à l'americaine.



correspondace permet de connaitre le jour du mois du premier mercredi



si date(w,mktime(0,0,0,1,1,2000); retourne

0 (dimanche) alors le premier mercredi sera le $correspondance[0] soit le 4 janvier 2000

1 (lundi) alors le premier mercredi sera le $correspondance[1] soit le 3 janvier 2000



etc



6 (samedi) alors le premier mercredi sera le $correspondance[6] soit le 5 janvier 2000



j'espere que j'ai ete clair lol
Messages postés
208
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2008

le tien est mieux puisqu'il evite d'initialiser un tableau
Messages postés
145
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
6 juin 2010

Merci pour toutes vos réponses c'est super, ce probleme est reglé !

Mais si j'ai une fete tous les 2 ans, les deux premiers week-end de janvier par exemple, faut-il employer le meme principe ????
Messages postés
145
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
6 juin 2010

>> Arnal69130

C'est arnal comme arno ??? vous remplacez les o par les al ossi chez vous ?? lol

Et dis moi
je comprends pas ca dans ton code


<?php
$jourSemainePremierMois
= date
( 'w'
,mktime
(0,0,0,$mois
,1,$annee
));
$jourMoisPremierMercredi
=(10-$jourSemainePremierMois
)%7+1;
//10=(7jours par semaine -1) + 4(position mercredi)
?>

C'est pour calculer mercredi c'est la valeur a changer si je veux lundi ou jeudi comme premier jour ????
Messages postés
445
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
22 mars 2007
1
ça c'est la langue française qui le dit ! un Arnal, des Arnaud ;o)
Sinon, pour revenir au code, grâce à la fonction de Tardigrade as-tu tout bien compris ?

Arn;o)