Problème de date

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème de date

par dunbar » 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

par Invité » 04 sept. 2007, 18:24

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

par dunbar » 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 ;

par Ryle » 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.

par dunbar » 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 :!:

par Invité » 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:

par Aureusms » 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 ?

par dunbar » 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

par Aureusms » 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)

par dunbar » 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.

par Aureusms » 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ù ?

par dunbar » 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

par Aureusms » 03 sept. 2007, 20:59

$dateDebut = $anneePrecedente.'-01-01'; // on va du 1er septembre de l'an dernier
Septembre ?? je dirai Janvier !!!

Problème de date

par dunbar » 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