Page 1 sur 1
Statistiques entre 2 dates. nombre de jours par mois
Posté : 17 nov. 2013, 14:46
par alpha911
Bonjour,
Je souhaite faire des statistiques sur des données que j'ai en base de donnée impliquant des dates.
J'ai une date d'entrée ($date_debut = 2013-07-21)
et date de sortie ($date_fin = 2013-09-04)
j'aimerais pouvoir classer dans un tableau de ce type :
Janvier = 0 jours
Fevrier = 0 jours
Mars = 0 jours
Avril = 0 jours
Mai = 0 jours
Juin = 0 jours
Juillet = 11 jours
Aout = 31 jours
Septembre = 4 jours
Octobre = 0 jours
Novembre = 0 jours
Decembre = 0 jours
Avez vous une piste ? une idée ?
Merci
Re: Statistiques entre 2 dates. nombre de jours par mois
Posté : 17 nov. 2013, 15:52
par computarelier
Bonjour,
Tu peux peut être créer un array de 12 entrées avec pour valeur par défaut 0 : array('01'=>0,'02'=>0 ... ,11=>0,12=>0).
Et tu mets un joli for :
for (chaque lot de dates à comparer){
while($date1<=$date2){
// $lemoisdeladateencours = Tu récupères le mois de la date en cours d'analyse
$monarray["$lemois"]++;
$date1+1jour
}
}
Voilà une petite idée...
Re: Statistiques entre 2 dates. nombre de jours par mois
Posté : 17 nov. 2013, 16:28
par alpha911
Merci pour cette réponse,
J'ai fais quelque chose d'à peut prêt similaire pour les 12 mois
Code : Tout sélectionner
$janviern = mysql_query("SELECT * FROM 'chats' WHERE 'date_entree' LIKE '$ann-01-%' AND 'valid' = '1'");
$nbresajanviern = mysql_num_rows($janviern);
while($sq = mysql_fetch_array($janviern))
{
$dateentree = $sq[date_entree];
$datesortie = $sq[date_sortie];
$mois = substr("$datesortie", 5, 2);
if($mois == '02')
{
$encoursjanvier = date( "t", mktime ( 0, 0, 0, 1, 1, "$ann"));
$janvds = "$ann-01-$encoursjanvier";
$nbfjanv = round((strtotime($janvds) - strtotime($dateentree))/(60*60*24));
$nbfjanvier = ($nbfjanv + $nbfjanvier);
}
$nbjanviern = round((strtotime($datesortie) - strtotime($dateentree))/(60*60*24));
$nbjoursjanviern = ($nbjoursjanviern + $nbjanviern);
}
$nbjourspourjanvier = ($nbfjanv + $nbresajanviern);
//$nbjoursjanviern = ($nbjoursjanviern + $nbresajanviern);
$restejanvier = ($nbjoursjanviern - $nbjourspourjanvier + $nbresajanviern);
Mais j'ai crainte que cela ne soit pas exact au niveau du résultat il y a quelque chose que je loupe ...
Re: Statistiques entre 2 dates. nombre de jours par mois
Posté : 17 nov. 2013, 16:41
par computarelier
Ouille ouille ouille... La lecture est dure !!
Bon courage !
Re: Statistiques entre 2 dates. nombre de jours par mois
Posté : 17 nov. 2013, 16:47
par alpha911
Tu m’étonnes ....
Merci quand même
Re: Statistiques entre 2 dates. nombre de jours par mois
Posté : 17 nov. 2013, 18:10
par sirakawa
1 IMPERATIF
Abandonner mysql au profit de mysqli ou pdo (mysql va être abandonné par php.)
2 Suggestion
ça vaudrait quand même le coup de se servir du champ date de mysql.
Re: Statistiques entre 2 dates. nombre de jours par mois
Posté : 17 nov. 2013, 19:32
par alpha911
Merci pour cette réponse,
sur Mysql il sagit bien d'une date dans la structure voici la composition de la base :
TABLE chats :
id, nom, date_entree, date_sortie, valid
1, titi, 2012-07-21, 2012-09-04, 1
le script devrait être capable de dire
Juillet = 11 jours (21/07 au 31/07)
Aout = 31 jours (01/08 au 31/08)
Septembre = 4 jours (01-09 au 04/09)
et voici la requette que j'ai essayé mais qui ne permet pas de dispatcher dans un tableau comme ci dessus :
Code : Tout sélectionner
SELECT count(*), DATEDIFF((DATE(`date_sortie`)), (DATE(`date_entree`)) ) FROM chats WHERE `date_entree` LIKE '2012-07-%'
cela donne bien le nombre de jours qui séparent les 2 dates mais ne convient pas pour être sur un tableau ...
Re: Statistiques entre 2 dates. nombre de jours par mois
Posté : 17 nov. 2013, 20:01
par sirakawa
SELECT count(*), DATEDIFF((DATE(`date_sortie`)), (DATE(`date_entree`)) ) FROM chats WHERE `date_entree` LIKE '2012-07-%'
et en remplaçant le count(*) par * ?
tu récupères les valeurs avecun fetch_array en les compant au fur à mesure ou pa rmysql(i)_affected_rows
Re: Statistiques entre 2 dates. nombre de jours par mois
Posté : 17 nov. 2013, 20:06
par alpha911
Merci,
peux-tu me préciser la démarche à suivre par l'exemple ?
Re: Statistiques entre 2 dates. nombre de jours par mois
Posté : 17 nov. 2013, 22:05
par yann18
tu peux tout faire en php:
$result=mysql_query("SELECT * FROM chats ");
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,"\n";
}
}
/*
*
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;
$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);
}
si tu souhaites utiliser la fonction indépendamment de mysql, tu peux faire ceci:
echo "<pre>";
var_dump(jourParMois("2010-02-02" ,"2010-04-22"));
echo "</pre>";
affichera
array (size=3)
0 => string 'Feb:26jours' (length=11)
1 => string 'Mar:31jours' (length=11)
2 => string 'Apr:8jours' (length=10)
Re: Statistiques entre 2 dates. nombre de jours par mois
Posté : 18 nov. 2013, 11:34
par alpha911
Merci beaucoup !!
Je vais essayer celà mais surtout de comprendre
