Problème de date

ViPHP
ViPHP | 2291 Messages

03 sept. 2007, 20:40

Bonjour,

J'affiche les résultat dans un tableau sur une année grâce à se code
$anneeEnCours    = date('Y'); // Année en cours
$anneePrecedente = $anneeEnCours-1 ; // l'an dernier

$dateDebut       = $anneePrecedente.'-01-01'; // on va du 1er janvier de l'an dernier
$dateFin         = $anneeEnCours . '-12-31'; // jusqu'au 31 décembre de cette année
Mais je ne sais pas comment faire pour qu'il supprime septembre 2006 et le remplace par septembre 2007 enfin qu'il supprime le 12 eme mois et le remplace par le nouveau car dans le cas de figure plus haut il stop à Aout 2007 et ne m'affiche pas setempbre 2007 :?:

D'avance merci
Modifié en dernier par dunbar le 03 sept. 2007, 21:03, modifié 1 fois.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 1996 Messages

03 sept. 2007, 20:59

$dateDebut = $anneePrecedente.'-01-01'; // on va du 1er septembre de l'an dernier
Septembre ?? je dirai Janvier !!!
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 2291 Messages

03 sept. 2007, 21:03

$dateDebut = $anneePrecedente.'-01-01'; // on va du 1er septembre de l'an dernier
Septembre ?? je dirai Janvier !!!
Oui erreur suite à une modif mais bon c'est un détail
C'est parce que l'année de mes données commence en Septembre
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 1996 Messages

03 sept. 2007, 21:12

Dans ton code :
$anneeEnCours = date('Y'); // Année en cours
$anneePrecedente = $anneeEnCours-1 ; // l'an dernier

$dateDebut = $anneePrecedente.'-01-01'; // on va du 1er janvier de l'an dernier
$dateFin = $anneeEnCours . '-12-31'; // jusqu'au 31 décembre de cette année
$dateDebut sera égale à 2006-01-01
$dateFin sera égale à 2007-12-31

Ca fais deux années pleines : Ai-je bien compris ? Après tu parles de changer des mois 09/2006 en 09/2007 mais où ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 2291 Messages

03 sept. 2007, 21:32

Dans ton code :
$anneeEnCours = date('Y'); // Année en cours
$anneePrecedente = $anneeEnCours-1 ; // l'an dernier

$dateDebut = $anneePrecedente.'-01-01'; // on va du 1er janvier de l'an dernier
$dateFin = $anneeEnCours . '-12-31'; // jusqu'au 31 décembre de cette année
$dateDebut sera égale à 2006-01-01
$dateFin sera égale à 2007-12-31

Ca fais deux années pleines : Ai-je bien compris ? Après tu parles de changer des mois 09/2006 en 09/2007 mais où ?
Le but est d'affichée une année de donnée mais avec mon code quand il arrive à une année il stop donc j'ai commencer en septembre 2006 et il stop l'affichage à Août 2007 mois je voudrais qu'il n'affiche plus septembre 2006 et qu'il le remplace par les données de septembre 2007 je ne voie pas pourquoi il ne continue pas :?:

Ma page
$anneeEnCours    = date('Y'); // Année en cours
$anneePrecedente = $anneeEnCours -1  ; // l'an dernier

$dateDebut       = $anneePrecedente . '-01-01'; // on va du 1er septembre de l'an dernier
$dateFin         = $anneeEnCours . '-12-31'; // jusqu'au 31 décembre de cette année


      $sql = "SELECT date_encodage,
              MONTH(date) AS mois, COUNT(TA) AS TA, SUM(prix) AS montant
              FROM prestation
              WHERE date BETWEEN '".$dateDebut."' AND '".$dateFin."'
              GROUP BY MONTH(date)
              ORDER BY IDot DESC
              ";
      $sql = mysql_query($sql) or die ('Erreur : '.mysql_error() );



       $month_fr = array  (	1 	=> 'Janvier',
							2 	=> 'Février',
							3 	=> 'Mars',
							4 	=> 'Avril',
							5 	=> 'Mai',
							6 	=> 'Juin',
							7 	=> 'Juillet',
							8 	=> 'Aout',
							9 	=> 'Septembre',
							10 	=> 'Octobre',
							11 	=> 'Novembre',
							12 	=> 'Décembre'
							);



         /************Début de mon tableau***********************/
       echo '</font><center><table cellspacing="1" border="1">
	<font color="#60C960">'."\n";
        /* première ligne on affiche les titres des colonnes */
        echo '</font><tr><font color="#60C960">';
        echo '</font><td style="border: 1px ridge #6699CC; color:#008000" ><a href=../../index2.php>
		<b><font color="#000000">Accueil</font></b></td>
		<font color="#60C960">';
    // lecture et affichage des résultats .
    while($row = mysql_fetch_array($sql)){
    $date = $row['date_encodage'];
        list($annee, $mois_m, $jour) = explode("-", $date);



        echo '</font><tr><font color="#60C960">';
        echo '</font><td style="border: 1px ridge #6699CC; color:#008000" ><a href=reslut_mois.php?mois='.$row['mois'].'>
		<b><font color="#000000">'.$month_fr[$row['mois']].'</font></b></td>
		<font color="#60C960">';
        echo '</font></tr><font color="#60C960">'."\n";    }
        echo '</font></table></center><font color="#60C960">'."\n";
    // fin du tableau.
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 1996 Messages

03 sept. 2007, 22:05

Ok comprend mieux donc ta requête actuellement elle donne :
$sql = "SELECT date_encodage,
              MONTH(date) AS mois, COUNT(TA) AS TA, SUM(prix) AS montant
              FROM prestation
              WHERE date BETWEEN '".$dateDebut."' AND '".$dateFin."'
              GROUP BY MONTH(date)
              ORDER BY IDot DESC 
$sql = "SELECT date_encodage,
              MONTH(date) AS mois, COUNT(TA) AS TA, SUM(prix) AS montant
              FROM prestation
              WHERE date BETWEEN '2006-01-01' AND '2007-12-31'
              GROUP BY MONTH(date)
              ORDER BY IDot DESC 

Un truc de bizarre : Si je lis bien ton code tu demande à "date" d'être entre deux "string" :$dateDebut et $dateFin. Mais cela ne serait plutôt pas "date_encodage"?
$sql = "SELECT date_encodage,
              MONTH(date) AS mois, COUNT(TA) AS TA, SUM(prix) AS montant
              FROM prestation
              WHERE `date_encodage` BETWEEN '".$dateDebut."' AND '".$dateFin."'
              GROUP BY MONTH(date)
              ORDER BY IDot DESC 
car d'après
$date = $row['date_encodage'];
        list($annee, $mois_m, $jour) = explode("-", $date);
"date_encodage" sort sous forme 2007-09-03 (pour la date d'aujourd'hui)
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 2291 Messages

03 sept. 2007, 22:14

Ok comprend mieux donc ta requête actuellement elle donne :
$sql = "SELECT date_encodage,
              MONTH(date) AS mois, COUNT(TA) AS TA, SUM(prix) AS montant
              FROM prestation
              WHERE date BETWEEN '".$dateDebut."' AND '".$dateFin."'
              GROUP BY MONTH(date)
              ORDER BY IDot DESC 
$sql = "SELECT date_encodage,
              MONTH(date) AS mois, COUNT(TA) AS TA, SUM(prix) AS montant
              FROM prestation
              WHERE date BETWEEN '2006-01-01' AND '2007-12-31'
              GROUP BY MONTH(date)
              ORDER BY IDot DESC 

Un truc de bizarre : Si je lis bien ton code tu demande à "date" d'être entre deux "string" :$dateDebut et $dateFin. Mais cela ne serait plutôt pas "date_encodage"?
$sql = "SELECT date_encodage,
              MONTH(date) AS mois, COUNT(TA) AS TA, SUM(prix) AS montant
              FROM prestation
              WHERE `date_encodage` BETWEEN '".$dateDebut."' AND '".$dateFin."'
              GROUP BY MONTH(date)
              ORDER BY IDot DESC 
j'ai deux champs un date, et l'autre date_encodage mais il ont les même date
car d'après
$date = $row['date_encodage'];
        list($annee, $mois_m, $jour) = explode("-", $date);
"date_encodage" sort sous forme 2007-09-03 (pour la date d'aujourd'hui)
J'ai fait cela pour sortir le mois pour qu'il montre xxxx prestations pour le mois de $mois
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

ViPHP
ViPHP | 1996 Messages

03 sept. 2007, 22:32

Mmmm Etrange donc...

Si tu fais :
$sql = "SELECT date_encodage,
              MONTH(date) AS mois, COUNT(TA) AS TA, SUM(prix) AS montant
              FROM prestation
              WHERE date > '2007-08-31'
              GROUP BY MONTH(date)
              ORDER BY IDot DESC 
Tu obtiens quoi ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Invité
Invité n'ayant pas de compte PHPfrance

04 sept. 2007, 17:12

Mmmm Etrange donc...

Si tu fais :
$sql = "SELECT date_encodage,
              MONTH(date) AS mois, COUNT(TA) AS TA, SUM(prix) AS montant
              FROM prestation
              WHERE date > '2007-08-31'
              GROUP BY MONTH(date)
              ORDER BY IDot DESC 
Tu obtiens quoi ?
Les prestations du 08/07 :wink:

ViPHP
ViPHP | 2291 Messages

04 sept. 2007, 17:15

$anneeEnCours    = date('Y'); 
$anneePrecedente = $anneeEnCours   ; 
$dateDebut       = $anneePrecedente . '-01-01'; // on va du 1er septembre de l'an dernier 
$dateFin         = $anneeEnCours . '-12-31'; // jusqu'au 31 décembre de cette année 


      $sql = "SELECT date_encodage, 
              MONTH(date) AS mois, COUNT(TA) AS TA, SUM(prix) AS montant 
              FROM prestation 
              WHERE date BETWEEN '".$dateDebut."' AND '".$dateFin."' 
              GROUP BY MONTH(date) 
              ORDER BY IDot DESC 
              "; 
      $sql = mysql_query($sql) or die ('Erreur : '.mysql_error() ); 



       $month_fr = array  (    1     => 'Janvier', 
                            2     => 'Février', 
                            3     => 'Mars', 
                            4     => 'Avril', 
                            5     => 'Mai', 
                            6     => 'Juin', 
                            7     => 'Juillet', 
                            8     => 'Aout', 
                            9     => 'Septembre', 
                            10     => 'Octobre', 
                            11     => 'Novembre', 
                            12     => 'Décembre' 
                            ); 



         /************Début de mon tableau***********************/ 
       echo '</font><center><table cellspacing="1" border="1"> 
    <font color="#60C960">'."\n"; 
        /* première ligne on affiche les titres des colonnes */ 
        echo '</font><tr><font color="#60C960">'; 
        echo '</font><td style="border: 1px ridge #6699CC; color:#008000" ><a href=../../index2.php> 
        <b><font color="#000000">Accueil</font></b></td> 
        <font color="#60C960">'; 
    // lecture et affichage des résultats . 
    while($row = mysql_fetch_array($sql)){ 
    $date = $row['date_encodage']; 
        list($annee, $mois_m, $jour) = explode("-", $date); 



        echo '</font><tr><font color="#60C960">'; 
        echo '</font><td style="border: 1px ridge #6699CC; color:#008000" ><a href=reslut_mois.php?mois='.$row['mois'].'> 
        <b><font color="#000000">'.$month_fr[$row['mois']].'</font></b></td> 
        <font color="#60C960">'; 
        echo '</font></tr><font color="#60C960">'."\n";    } 
        echo '</font></table></center><font color="#60C960">'."\n"; 
    // fin du tableau. 
Si je fais comme cela sa fonctionne presque il m'indique le mois de septembre MAIS si je clique sur le lien il va me chercher le mois de septembre 2006 et 2007 :?: |*()
Et je ne voie pas ou je me trompe :!:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

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

04 sept. 2007, 17:19

Tes champs en base sont vraiment du type date ?

Par ailleurs il manque le champ date_encodage dans le GROUP BY, puisque celui-ci est présent dans le select et n'est pas soumis à une fonction de groupe.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 2291 Messages

04 sept. 2007, 17:22

Tes champs en base sont vraiment du type date ?

Par ailleurs il manque le champ date_encodage dans le GROUP BY, puisque celui-ci est présent dans le select et n'est pas soumis à une fonction de groupe.
Oui absolument j'avais suivis vos conseils il y à un an en la créant :wink:
CREATE TABLE `prestation` (
`IDot` int(11) NOT NULL auto_increment,
`date_encodage` date NOT NULL,
`date` date NOT NULL,
`date_modif` date NOT NULL,
`heure_modif` time NOT NULL,
`nom_utilisateur` varchar(255) collate latin1_german1_ci NOT NULL,
`ref_client` varchar(255) collate latin1_german1_ci NOT NULL,
`nom_client` varchar(255) collate latin1_german1_ci NOT NULL,
`adr_client` varchar(255) collate latin1_german1_ci NOT NULL,
`code_postal` varchar(255) collate latin1_german1_ci NOT NULL,
`commune` varchar(255) collate latin1_german1_ci NOT NULL,
`adr_modem` varchar(17) collate latin1_german1_ci NOT NULL,
`technicien` varchar(255) collate latin1_german1_ci NOT NULL,
`heure_debut` time NOT NULL,
`heure_fin` time NOT NULL,
`telephone` varchar(15) collate latin1_german1_ci NOT NULL,
`etat_installation` varchar(255) collate latin1_german1_ci NOT NULL,
`TA` varchar(10) collate latin1_german1_ci NOT NULL,
`prix` decimal(9,2) NOT NULL,
`commentaire` text collate latin1_german1_ci NOT NULL,
PRIMARY KEY (`IDot`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=2063 ;
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Invité
Invité n'ayant pas de compte PHPfrance

04 sept. 2007, 18:24

Les prestations du 08/07 :wink:
Pas logique cela devrait être 09/2007

ViPHP
ViPHP | 2291 Messages

04 sept. 2007, 18:45

Tes champs en base sont vraiment du type date ?

Par ailleurs il manque le champ date_encodage dans le GROUP BY, puisque celui-ci est présent dans le select et n'est pas soumis à une fonction de groupe.
Oui bon ma logique n'étais pas bonne :oops:
J'ai modifier ma requette de récupértion comme ceci
$sql = "SELECT *

              FROM prestation
              WHERE YEAR(date)= '".$annee."' AND MONTH(date) = '".$MoisConsult."'
ET sa fonctionne pour l'année en cours, pour les autres années il suffira que je fasse un explode pour avoir le mois et l'année de l'encodage :wink:
Merci
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.