Statistiques par mois dates

Alpha911 - 1 mai 2014 à 23:59
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 - 6 mai 2014 à 07:55
Bonjour,
Pour un refuge animalier, nous avons besoin d'avoir une vue sur le nombre de jours ou sont entrés nos pensionnaires avec classement par mois quelque chose qui puisse s'afficher sous forme de tableau :

Janvier : 10 jours
Fevrier : 23 jours
Mars : 27 jours
....

sachant que les enregistrements sont faits ainsi :

id, nom, date_entree, date_sortie

1, chaton, 2013-12-20, 2013-12-28
2, mimi, 2013-03-14, 2013-05-21
...

Voici jusqu'ici ce qui a été fait mais je pense que celà ne convient pas .... Pouvez vous apporter vos lumieres ?



while($row = mysql_fetch_array($result)){
$tabDates = jourParMois($row['date_entree'], $row['date_sortie']); //appel à la fonction jourParmois()
/*pour chaque couple(date_entree,date_sortie)
on affiche éventuellement tous les mois compris entre date_entree et date_sortie incluses*/
foreach($tabDates as $date){
echo $date,"<br>";
}
}

/*
*
détermine les mois compris entre 2 dates
**/

function jourParMois($dateDebut, $dateFin){
$dateDebut=strtotime($dateDebut);

$dateFin =strtotime($dateFin);


$dateCourante = $dateFin;

$dates=array();
//les dates à comparer correspondent à des mois different, alors on peut chercher les mois compris entre dateDebut et dateFin
if( date('m',$dateDebut) != date('m',$dateFin)) {
while ($dateCourante >= $dateDebut) {
$dateCourante = strtotime( date('Y/m/01/',$dateCourante).' -1 month');
$dates[]=date('M',$dateCourante) .':'.date('t',$dateCourante).'jours';

}
sort($dates);
$dates[0]=date('M',$dateDebut).':'.jRestants($dateDebut).'jours';//on ajoute la DateDebut
$dates[]=date('M',$dateFin).':'.jRestants($dateFin).'jours';//on ajoute la dateFin au tableau
}else{//cas les 2 dates (debut et fin) correspondent au même mois
$nbJours = ((($dateFin - $dateDebut)/86400) + 1).' jours';
//$nbJours = (($dateFin - $dateDebut)/86400).' jours';
$dates[] = date('M', $dateDebut).':'. $nbJours;
}

return $dates;
}
/*
nombre de jours restants d'un mois donné
*/
function jRestants($date){

return date('t',$date)-date('d',$date);
}

4 réponses

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
Modifié par nagashima le 2/05/2014 à 14:44
salut,

ta base étant en mysql, je pense que tu te complique la vie ^^

Je m'explique : il y a une méthode pour récupérer le mois dans une date en mysql : MONTH.

Du coup une requête de ce type fonctionnerai :


select * from maTable where MONTH(unDate) = 9

Du coup en couplant avec un group by et un count, il n'y a plus de difficulté ^^

naga
0
jordane45 Messages postés 38156 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 mai 2024 344
2 mai 2014 à 15:27
Bonjour,

Je ne suis pas bien certain d'avoir compris ta demande...

Tu as dans une table une liste d'animaux... mimi..pepete..toto...
Pour chacun, une date d'entrée et une date de départ.

Au final tu souhaites obtenir un tableau qui t'affiche Mois / Mois le nombre de jours où vous les avez eu..
( pour CHAQUE ANIMAL ou bien la somme pour l'ensemble des pensionnaires ?)


Pour être bien sûr de ce que tu souhaites faire...
Peux tu nous afficher quel serait le résultat ( ce qu'il te faut afficher) pour cet exemple :
2, mimi, 2013-03-14, 2013-05-21

Si c'est pour chaque animal, mimi donnerait un truc du genre :
Mars = 17
Avril = 30
Mai = 21


C'est bien ça ??


0
Bonjour et merci car celà fait plus d'un mois que je coince la dessus.

En effet un enregistrement donne ceci :
(etiquette enregistrements) enregistrement.

(idchat), (nom), (date_entree), (date_sortie)
1, Minette, 2013-12-30, 2014-01-02
2, Titou, 2013-12-29, 2014-01-04

le tableau devrait etre une statistique globale de ce genre :

Decembre : 3 jours
Janvier : 6 jours

Minette et titou sont dans la base et minette a fait 1 jour en decembre et Titou a fait 2 jours en decmebre soit un total general de 3 jours ... pareil en Janvier.
0
Pas d'idées ?
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
6 mai 2014 à 07:55
toujours pareil, en s'appuyant sur le mois et l'année tu pourras récupérer les enregistrements qui t'interesse. Il ne te reste qu'à soustraire avec la date du 1er du mois qui suit
0
Rejoignez-nous