JeuWeb - Crée ton jeu par navigateur
[SCRIPT] Compléter un tableau de dates - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [SCRIPT] Compléter un tableau de dates (/showthread.php?tid=5855)



[SCRIPT] Compléter un tableau de dates - Wells - 14-12-2011

Faisant des stats, je me suis retrouvé devant un cas de figure embetant.

Je retourne un tableau de date au format $TAB[mois/jour/an]=valeur

Ce tableau est alimenté par un requete sql. Probleme, si pour un jour donné, il n'y a pas de valeur (valeur=0), le tableau ne comporte pas d'entrée pour ce jour.

Cela créer de vilain trous dans mes courbes. J'ai donc fait un script pour initialiser mon tableau à 0 entre deux dates données:

Code :
$date_debut_jour=7;
$date_debut_mois=11;
$date_debut_an=2011;
$date_fin_jour=date('d');
$date_fin_mois=date('m');
$date_fin_an=date('Y');
$COEF_FIN=($date_fin_jour+($date_fin_mois*100)+($date_fin_an*10000));
do
    {
    //on regarde le nb max de jour dans le mois
    $jour_max = intval(date("t",$date_debut_mois));
    do
        {
        $NB7[$date_debut_mois.'/'.$date_debut_jour.'/'.$date_debut_an]=0;    
        $COEF=($date_debut_jour+($date_debut_mois*100)+($date_debut_an*10000));    
        //echo '<br>&nbsp;&nbsp;&nbsp;'.$date_debut_jour.'/'.$date_debut_mois.'/'.$date_debut_an.' = '.$COEF.'/'.$COEF_FIN;
        $date_debut_jour++;
        }
    while($date_debut_jour<$jour_max and $COEF_FIN!=$COEF);
        
    if($COEF_FIN!=$COEF)
        {
        $date_debut_jour=1;
        $date_debut_mois++;
        
        if($date_debut_mois==13)
            {
            $date_debut_mois=1;    
            $date_debut_an++;    
            }
        }
    }
while($COEF_FIN!=$COEF);

Si vous avez des idées d'améliorations, je suis preneur Wink


RE: [SCRIPT] Compléter un tableau de dates - Ter Rowan - 14-12-2011

je ne maitrise pas trop les dates mais si tu arrives à trouver un entier correspondant à un jour donnée (genre un timestamp, pas basé sur les secondes, mais sur les jours calendaires)

tu peux remplir rapidement un tableau avec array_fill( $jour_debut, $nb_jours, 0);

ça t'évite de t'embêter avec tout ce code.

Après restera plus qu'à convertir tes dates dans le timestamp(par jour) et inversement


RE: [SCRIPT] Compléter un tableau de dates - Myrina - 14-12-2011

J'ai eu le même souci sur des graphiques que je voulais minute par minute (certaines minutes, il ne se passe rien!).

Mais pour avoir le tableau initialisé à zéro, je suis passé par :
$heures=range($min_heure,$max_heure,60);
$nbreq=array_fill_keys($heures,0);

$min_heure et $max_heure sont calculés lors d'une première itération de mes données:

.
.
.
for (...) {
.

$heure=mktime($time[0],$time[1],0,1,1,1970);
$min_heure=min($min_heure,$heure);
$max_heure=max($max_heure,$heure);
.
}



RE: [SCRIPT] Compléter un tableau de dates - niahoo - 14-12-2011

(14-12-2011, 04:41 PM)Ter Rowan a écrit : je ne maitrise pas trop les dates mais si tu arrives à trouver un entier correspondant à un jour donnée (genre un timestamp, pas basé sur les secondes, mais sur les jours calendaires)

tu peux remplir rapidement un tableau avec array_fill( $jour_debut, $nb_jours, 0);

ça t'évite de t'embêter avec tout ce code.

Après restera plus qu'à convertir tes dates dans le timestamp(par jour) et inversement

Bonne idée ! si j'y avais pensé avant ça m'aurait évité un gros bout de code bien gras dans deux de mes applis ...

il y a justement cette fonction http://fr2.php.net/cal-to-jd et sa réciproque.


RE: [SCRIPT] Compléter un tableau de dates - julp - 14-12-2011

DatePeriod (+ DateInterval + DateTime) ?

Exemple :
Code :
$start = new DateTime('2009-01-01');
$end = new DateTime('2009-02-01');
foreach (new DatePeriod($start, new DateInterval('P1D'), $end) as $dt) {
        echo $dt->format('Y-m-d'), PHP_EOL;
}