interrogation sur des dates

Invité
Invité n'ayant pas de compte PHPfrance

21 nov. 2006, 17:52

Bonjour,

j'aimerai savoir de quelle manière savoir pour un mois donnée le nombre de lundi, mardi, mercredi..... il y a. De plus de quelle manière gérer les jours férié ?

Merci d'avance

Mammouth du PHP | 1776 Messages

21 nov. 2006, 18:19

En exploitant les possibilités de la fonction date() :wink:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

21 nov. 2006, 18:51

Pour les jours fériés, il faudra te procurer la liste selon le pays.
Sinon, date('t') te donne le nb de jours dans le mois.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Invité
Invité n'ayant pas de compte PHPfrance

22 nov. 2006, 10:18

d'acord merci.
en faite pour le nombre de jour il faut que je fasse une boucle sur tout le mois et incrementé une variable chaque fois que je tombe sur le jour en question ?
merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

22 nov. 2006, 10:40

...
Sinon, date('t') te donne le nb de jours dans le mois.
Prend bien le temps de lire les réponses qu'on te donne ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 1380 Messages

22 nov. 2006, 12:40

d'acord merci.
en faite pour le nombre de jour il faut que je fasse une boucle sur tout le mois et incrementé une variable chaque fois que je tombe sur le jour en question ?
merci
Oui.

Je ne vois pas d'autre solution que de boucler sur les jours d'un mois.

date('w', $timestamp) te retournera le numéro du jour de la semaine.
ripat

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 nov. 2006, 15:01

Je ne vois pas d'autre solution que de boucler sur les jours d'un mois.
Une autre solution pour ne pas à avoir à tester chaque jour pourrait être de regarder quel jour de la semaine est le premier jour du mois, et d'utiliser le nombre de jour dans le mois pour savoir combien de fois on va le retrouver.

Y a probablement plus simple, mais la première chose qui me vient serait celle ci :

nov 2006 : 30 jours
premier jour => mercredi

mercredi : ceil(30/7) = 5
jeudi : ceil(29/7) = 5
vendredi : ceil(28/7) = 4
...
mardi : ceil(24/7) = 4

Si ça vous inspire... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

22 nov. 2006, 15:27

merci bcp toutes vos reponses vont bcp me servir

ViPHP
ViPHP | 1380 Messages

22 nov. 2006, 16:52

Plus généraliste, ceci calculera le nombre de chaque jour de la semaine entre deux dates arbitraires. Attention au problème de changement d'heure. Pas testé sur ce point.
$joursSem = array(
  array('Di', 0), array('Lu', 0), array('Ma', 0), array('Me',0),
  array('Je', 0), array('Ve', 0), array('Sa', 0)
);

// mktime (heure, min, sec, mois, jour, année)
$dateDebut = mktime(0, 0, 0, 3, 1, 2006);
$dateFin   = mktime(0, 0, 0, 11, 31, 2006);

do {
  $joursSem[date('w', $dateDebut)][1]++;
  $dateDebut += 86400;
} while ($dateDebut < $dateFin);


echo '<pre>'; print_r($joursSem);  echo '</pre>';
ripat

ViPHP
ViPHP | 1961 Messages

22 nov. 2006, 17:10

Bonjour,

Je ne pense pas que le chagement d'heure joue.

Tes valeurs sont à 00h00 et les chagements on lieu 02h00 -> 03h00 ou bien 03h00 -> 02h00, donc dans la même jounée.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
ViPHP | 1380 Messages

22 nov. 2006, 17:49

Tu as sans doute raison mais je suis méfiant sur le changement d'heure.

Exemple, on pourrait calculer le nombre de jours séparant deux date comme ceci:
$dateDebut = mktime(0, 0, 0, 3, 24, 2006);
$dateFin   = mktime(0, 0, 0, 3, 27, 2006);
echo ($dateFin - $dateDebut) / (24 * 60 * 60), '<br />';
Surprise! Retourne 2.95833333333

La bonne méthode maintenant avec l'argument DST de mktime()
// mktime (heure, min, sec, mois, jour, année, dst)
$dateDebut = mktime(0, 0, 0, 3, 24, 2006, 1);
$dateFin   = mktime(0, 0, 0, 3, 27, 2006, 1);
echo ($dateFin - $dateDebut) / (24 * 60 * 60), '<br />';
:wink:
ripat