[PhP] Parcourir des dates

Résolu/Fermé
kaopimp Messages postés 44 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 8 juillet 2008 - 25 juin 2007 à 10:58
kaopimp Messages postés 44 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 8 juillet 2008 - 25 juin 2007 à 16:18
Voila j'aimerais savoir si il existe un moyen simple pour parcourir les jours entre 2 dates données sous la format: AAAA-MM-JJ

ce que j'aimerais c'est pouvoir gerer les samedis/dimanches et les mois de 30jours.

Enfin juste savoir si ya un moyen plus simple (ex: une classe) qui m'eviterai de devoir le faire a la main.

merci

5 réponses

J'ai trouvé ça dans mes archives est ce que tu peux t'en servir ?

un petit script pour générer un calendrier en PHP et le mettre en page en CSS.
Présentation
Dans mon exemple j'ai séparé le code en un fichier index principal et trois fichiers à inclure (string.inc.php, calendrier.inc, calendrier.css). Le calendrier généré ne contient pas de tableau mais une liste d'éléments.

string.inc.php contient des fonctions de gestion de chaines:
// fonctions utiles, $valeur représente une date au format AAAA-MM-JJ
function getSecond($valeur) {
return substr($valeur, 17, 2);
}

function getMinute($valeur) {
return substr($valeur, 14, 2);
}

function getHour($valeur) {
return substr($valeur, 11, 2);
}

function getDay($valeur) {
return substr($valeur, 8, 2);
}

function getMonth($valeur) {
return substr($valeur, 5, 2);
}

function getYear($valeur) {
return substr($valeur, 0, 4);
}

function monthNumToName($mois) {
$tableau = Array("", "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aôut", "Septembre", "Octobre", "Novembre", "Décembre");
return (intval($mois) > 0 && intval($mois) < 13) ? $tableau[intval($mois)] : "Indéfini";
}
calendrier.inc.php, contient le script générant le calendrier:
// Fonction pour afficher le calendrier
function showCalendar($periode) {
$leCalendrier = "";
// Tableau des valeurs possibles pour un numéro de jour dans la semaine
$tableau = Array("0", "1", "2", "3", "4", "5", "6", "0");
$nb_jour = Date("t", mktime(0, 0, 0, getMonth($periode), 1, getYear($periode)));
$pas = 0;
$indexe = 1;

// Affichage du mois et de l'année
$leCalendrier .= "\n\t<h2>» " . monthNumToName(getMonth($periode)) . " " . getYear($periode) . "</h2>";
// Affichage des entêtes
$leCalendrier .= "
<ul id=\"libelle\">
\t<li>L</li>
\t<li>M</li>
\t<li>M</li>
\t<li>J</li>
\t<li>V</li>
\t<li>S</li>
\t<li>D</li>
</ul>";
// Tant que l'on n'a pas affecté tous les jours du mois traité
while ($pas < $nb_jour) {
if ($indexe == 1) $leCalendrier .= "\n\t<ul class=\"ligne\">";
// Si le jour calendrier == jour de la semaine en cours
if (Date("w", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) == $tableau[$indexe]) {
// Si jour calendrier == aujourd'hui
$afficheJour = Date("j", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode)));
if (Date("Y-m-d", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) == Date("Y-m-d")) {
$class = " class=\"itemCurrentItem\"";
}
else {
// 1 est toujours vrai => on affiche un lien à chaque fois
// A vous de faire les tests nécessaire si vous gérer un agenda par exemple
if (1) {
$class = " class=\"itemExistingItem\"";
$afficheJour = "<a href=\"\">" . Date("j", mktime(0, 0, 0, getMonth($periode), 1 + $pas, getYear($periode))) . "</a>";
}
else {
$class = "";
}
}
// Ajout de la case avec la date
$leCalendrier .= "\n\t\t<li$class>$afficheJour</li>";
$pas++;
}
//
else {
// Ajout d'une case vide
$leCalendrier .= "\n\t\t<li> </li>";
}
if ($indexe == 7 && $pas < $nb_jour) { $leCalendrier .= "\n\t</ul>"; $indexe = 1;} else {$indexe++;}
}
// Ajustement du tableau
for ($i = $indexe; $i <= 7; $i++) {
$leCalendrier .= "\n\t\t<li> </li>";
}
$leCalendrier .= "\n\t</ul>\n";

// Retour de la chaine contenant le Calendrier
return $leCalendrier;
}
Utilisation
Il suffit d'appeler la fonction showCalendar() en passant en paramètre le mois et l'année sous la forme YYYY-MM.
Pour le mois en cours:
echo showCalendar(date("Y-m"));
1
Utilisateur anonyme
25 juin 2007 à 11:12
Salut,

Des solutions sont données ici :

https://codes-sources.commentcamarche.net/
0
kaopimp Messages postés 44 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 8 juillet 2008 35
25 juin 2007 à 11:30
merci ca m'avance deja un ptit peu, mais en fait j'explique mon probleme

il s'agit d'afficher dans un calendrier (deja cree), les periode d'absences, et donc de parcourir les jours pour afficher dans le calandrier 'abs' (tout ca est deja gerer) et de compter donc ses jours mais en n'affichant pas les dimanche et samedi et en ne les comptant pas. pour le moment je fais tout ca a la main.


en fait j'ai avance, ce qu'il me faudrait c'est de connaitre le jour d'une date donnée, mais aussi connaitre la longueur (28 ou 30 ou31) du mois selon l'année.
0
kaopimp Messages postés 44 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 8 juillet 2008 35
25 juin 2007 à 14:05
ba voila j'ai trouve donc je poste pour qu'elqun qui aurait le meme problem que moi, ya la gestion des années bissextiles, et ca permet de savoir quel jour de la semaine correspond la date passe en parametre.

http://www.codyx.org/snippet_determiner-jour-semaine-date_255_l_php_10.aspx

je rajoute pour etre complet comment obtenir le jour, le mois, et l'année a partir du format AAAA-MM-JJ

$date = $_POST['date'];
$dtemp = explode("-",$date);
$jour = $dtemp[2];
$mois =$dtemp[1];
$annee = $dtemp[0];
$j = getday($jour,$mois,$annee);

et voila $j prend des valeurs de 0 a 6, attention 0= lundi 6= dimanche !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kaopimp Messages postés 44 Date d'inscription lundi 25 juin 2007 Statut Membre Dernière intervention 8 juillet 2008 35
25 juin 2007 à 16:18
merci ca je comptai le faire a la main mais tu m'as drolement facilite le travail
0