IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Dates] mktime me retourne toujours 31 (nombre de jours dans le mois) [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut [Dates] mktime me retourne toujours 31 (nombre de jours dans le mois)
    Bonjour tout le monde,

    J'essaie de récupérer le nombre de jours dans un mois.

    Pour cela, j'utilise ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    	$nombrejour = date( "t", mktime(0,0,0,intval($_POST['LeMois']),1,intval($_POST['Lannee'])));
     
    	$retour = '<select name="listJours" id="listJours" name="listJours" onchange="Generer_calendrier(document.getElementById(\'listMois\').value,document.getElementById(\'listAnnee\').value,this.value)" style="display:inline">';
    	for($i = 1; $i <= $nombrejour; $i++)
    	{
    		$retour.='<option value="'.$i.'">'.$i.'</option>';
    	}
    	$retour.= '</select>';
     
    	echo $retour;
     
    ?>
    Étrangement, j'obtiens à chaque fois 31.

    J'ai mis des intval pour transformer les valeurs reçues (String) en entier.

    Mon var_dump me donne ceci si je sélectionne février 2009 :

    array(2) { ["mois"]=> string(1) "7" ["annee"]=> string(4) "2009"
    Voici le code entier de la page PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    	$nombrejour = date( "t", mktime(0,0,0,intval($_POST['LeMois']),1,intval($_POST['Lannee'])));
     
    	$retour = '<select name="listJours" id="listJours" name="listJours" onchange="Generer_calendrier(document.getElementById(\'listMois\').value,document.getElementById(\'listAnnee\').value,this.value)" style="display:inline">';
    	for($i = 1; $i <= $nombrejour; $i++)
    	{
    		$retour.='<option value="'.$i.'">'.$i.'</option>';
    	}
    	$retour.= '</select>';
     
    	echo $retour;
     
    ?>
    et voici le retour javascript (AJAX)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="listJours" id="listJours" name="listJours" onchange="Generer_calendrier(document.getElementById('listMois').value,document.getElementById('listAnnee').value,this.value)" style="display:inline"><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option></select>
    Merci d'avance pour votre aide.

    beegees

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Points : 2 399
    Points
    2 399
    Par défaut
    ["mois"]=> string(1) "7"
    En Juillet il y a bien 31 jours

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par Seb33300 Voir le message
    En Juillet il y a bien 31 jours
    J'ai 31 pour chaque mois (février...).

    beegees

  4. #4
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Le problème est peut-être plutôt sur la page où tu sélectionnes ton mois ?
    Fred

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par micetf Voir le message
    Le problème est peut-être plutôt sur la page où tu sélectionnes ton mois ?
    Fred
    Merci pour ta réponse Fred,

    Voici le code de cette page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <form action="resume.php" method="post" id="form_resume" target="_blank">
    	  <table border="0">
    	  <tr>
    	  <td><div id="select_jours"></div></td>
    	  <td><select style="display:in" name="listMois" id="listMois" onchange="Nombre_jours(this.value,document.getElementById('listAnnee').value);check_mois(this.value)">
    	    <option value="0">Choisissez un mois</option>
    		<option value="1">janvier</option>
    	    <option value="2">f&eacute;vrier</option>
    	    <option value="3">mars</option>
    	    <option value="4">avril</option>
    	    <option value="5">mai</option>
    	    <option value="6">juin</option>
    	    <option value="7">juillet</option>
    	    <option value="8">ao&ucirc;t</option>
    	    <option value="9">septembre</option>
    	    <option value="10">octobre</option>
    	    <option value="11">novembre</option>
    	    <option value="12">d&eacute;cembre</option>
          </select></td>
     
    	  <td><select name="listAnnee" id="listAnnee" onchange="Nombre_jours(document.getElementById('listMois').value,this.value)" style="display:inline">
    	    <?php 
    			echo '<option value="'. date(Y).'">'.date(Y).'</option>';
    			echo '<option value="'. (date(Y)+1).'">'.(date(Y)+1).'</option>';
    		?>
          </select>
    	  </td>
     
          <td><input type="submit" disabled="disabled" id="bouton_resume" name="Submit" value="En un coup d'oeil" /></td>
     
    </tr>
    </table>
    </form>
    Encore merci.

    beegees

  6. #6
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    D'après ton formulaire,
    tu devrais récupérer le mois choisi dans $_POST['listMois'] et l'année dans $_POST['listAnnee'].
    Donc ton code devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    	$nombrejour = date( "t", mktime(0,0,0,intval($_POST['listMois']),1,intval($_POST['listAnnee'])));
     
    	$retour = '<select name="listJours" id="listJours" name="listJours" onchange="Generer_calendrier(document.getElementById(\'listMois\').value,document.getElementById(\'listAnnee\').value,this.value)" style="display:inline">';
    	for($i = 1; $i <= $nombrejour; $i++)
    	{
    		$retour.='<option value="'.$i.'">'.$i.'</option>';
    	}
    	$retour.= '</select>';
     
    	echo $retour;
     
    ?>
    Fred

  7. #7
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Merci pour ta réponse Fred,

    En fait, j'utilise AJAX.

    Je reçois deux paramètres en javascript qui sont mois et annee.

    Je passe ces deux paramètres à PHP sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xhr.open("POST","AJAX/Nombre_jours.php",true);
    		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    		xhr.send("mois="+mois+"&annee="+annee);
    Je reçois donc bien deux $_POST qui sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_POST['mois'] et $_POST['annee'].
    Le problème ne vient donc pas de là.

    Ce qui est étrange, c'est que quand je mets une valeur en "dur" il me retourne aussi 31 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nombrejour = date( "t", mktime(mktime(0,0,0,2,1,2009)));
    Me retourne 31

    Encore merci pour ton aide.

    beegees

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as imbriqué deux mktime()

  9. #9
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu as imbriqué deux mktime()
    Salut Sabotage,

    Désolé, erreur de frappe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nombrejour = date( "t", mktime(mktime(0,0,0,2,1,2009)));
    	echo $nombrejour;/*
    Me renvoie 31

    Je ne comprends pas.

    beegees

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    tu as toujours les deux mktime()

  11. #11
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 885
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 885
    Points : 16 298
    Points
    16 298
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu as imbriqué deux mktime()
    Citation Envoyé par beegees Voir le message
    Désolé, erreur de frappe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nombrejour = date( "t", mktime(mktime(0,0,0,2,1,2009)));
    	echo $nombrejour;/*
    Me renvoie 31

    Je ne comprends pas.
    C'est étonnant ...

  12. #12
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Vraiment désolé, j'ai un gros mal de tête.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nombrejour = date( "t", mktime(0,0,0,2,1,2009));
    echo $nombrejour;
    ça me retourne bien 28.

    Maintenant, pourquoi ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$nombrejour = date( "t", mktime(0,0,0,intval($_POST['LeMois']),1,intval($_POST['Lannee'])));
    echo $nombrejour;
    me retourne toujours 31 (???)

    Encore merci à vous tous pour votre dévouement et surtout pour votre patience.

    beegees

  13. #13
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 885
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 885
    Points : 16 298
    Points
    16 298
    Par défaut
    Parce que tes index LeMois et Lannee n'existent pas.

    Tu as dit toi-même 6 messages au-dessus que :

    Je reçois donc bien deux $_POST qui sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_POST['mois'] et $_POST['annee'].
    Alors pourquoi tu utilises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_POST['LeMois'] et $_POST['Lannee'].
    ?

  14. #14
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Re,

    Vraiment, merci !

    Et désolé, c'est un copié/collé qui est la source de ce problème.

    ça fonctionne nikel.

    Merci encore.

    beegees

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calculer le nombre de jours dans le mois à partir d'un date range
    Par arnaud036 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 04/05/2012, 17h00
  2. Date : Nombre de jour dans le mois
    Par grunk dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 29/07/2008, 16h48
  3. Réponses: 4
    Dernier message: 28/05/2007, 19h38
  4. [Dates] Calculer le nombre de jours dans le mois suivant...
    Par Life Hunter dans le forum Langage
    Réponses: 5
    Dernier message: 14/03/2006, 00h01
  5. [CR]nombre de jours dans un mois donné
    Par liberio dans le forum Formules
    Réponses: 2
    Dernier message: 20/04/2004, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo