Aide script date

amenosyla Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
Alain_42 Messages postés 5413 Statut Membre -
Bonjour, je suis éleveur félin et je voudrais mettre en place un calendrier de gestation. J'ai trouvé un script qui fonctionne parfaitement à un détail près. Il ne tient pas compte des années bissextile :(
La gestation chez un chat dure entre 63 et 70 jours.
exemple: si j'entre une date de saillie telle que 06/02/2010 + 63 jours il me retourne en résultat, pour la mise bas, 10/04/2010 ce qui est faux car ce devrait être le 12/04/2010. Donc comment modifier ce script ?
<?php  

if ($submit == 'Calculer') {  
    if ($compute == 'sub') {  
        $day = $day - $days;  
    } elseif ($compute == 'add') {  
        $day = $day + $days;  
    }  
    $echo = date($output, mktime (0,0,0,$month,$day,$year)); //ceci est la date calculée  
}  

echo "  
<form action=\"\" method=post>  
<table border=0 cellspacing=1 cellpadding=2 bgcolor=blue width=300>  
<tr>  
<td bgcolor=blue><font color=white face=arial><B>Date Calculée"; if (!empty($echo)) {echo " - Résultat: $echo";} echo "</B></font></td>  
</tr>  
<tr>  
<td bgcolor=white>  
    <table border=0 cellpadding=3 cellspacing=0>  
    <tr>  
        <td aligin=left><font color=blue face=arial>Choisir date:  </font></td><td aligin=left><select name=day>";  
        getoption(1, 31, date("d"));  
        echo "</select><select name=month>";  
        getoption(1, 12, date("m"));  
        echo "</select><select name=year>";  
        getoption(1970, 2020, date("Y"));  
        echo "</select></td>  
    </tr>  
    <tr>  
        <td aligin=left><font color=blue face=arial>Additionner</font></td><td aligin=left><select name=compute><option value=add>+<option value=sub>-</select>  
    <input type=text name=days size=4 maxlength=4><font color=blue face=arial> jour(s)</font></td>  
    </tr>  
    <tr>  
        <td aligin=left><font color=blue face=arial>Format de sortie:  </font></td><td aligin=left><select name=output><option value=\"d-m-Y\">dd-mm-YYYY<option value=\"l, d M Y\">weekday, dd mm yyyyy</select></td>  
    </tr>  
      
    <tr>  
        <td aligin=left colspan=2><input type=submit name=submit value=Calculer></td>  
    </tr>  
     </table>  
      
      
</td></tr></table></form>";  

function getoption($start, $end, $if) {  
    for ($i=$start;$i<=$end;$i++) {  
        echo "<option value=$i"; if ($i == $if) { echo " selected";} echo ">$i";  
    }  
}  

?> 


3 réponses

  1. Alain_42 Messages postés 5413 Statut Membre 904
     
    <?php  
    //il faut recuperer les valeurs dans le $_POST car si dans ton php.ini Register Global est à off ça ne marcherait pas
    if (isset($_POST['submit']) && $_POST['submit'] == 'Calculer') {  
        extract($_POST); //transforme tous les $_POST des champs en une variable correspondante au nom du champ
    	 //en passant par le timestamp ça résoud le pb des mois 30 / 31 / 28 /29
    	 //calcul du timestamp date saisie
    	 $timestamp_date_saisie=mktime (0,0,0,$month,$day,$year);
    	 if ($compute == 'sub') { 
    		$timestamp_date_calculee=$timestamp_date_saisie - ($days*3600*24);
        } elseif ($compute == 'add') {  
          $timestamp_date_calculee=$timestamp_date_saisie + ($days*3600*24); 
        }
    	 
        $resultat = date($output,$timestamp_date_calculee); //ceci est la date calculée  
    	 //ce n'est pas très judicieux de choisir des noms de variables correspondant a des noms réservés php comme echo etc....
    }  
    
    echo "  
    <form action=\"\" method=post>  
    <table border=0 cellspacing=1 cellpadding=2 bgcolor=blue width=300>  
    <tr>  
    <td bgcolor=blue><font color=white face=arial><B>Date Calculée";
     if (!empty($resultat)) {echo " - Résultat: $resultat";}
     echo "</B></font></td>  
    </tr>  
    <tr>  
    <td bgcolor=white>  
        <table border=0 cellpadding=3 cellspacing=0>  
        <tr>  
            <td aligin=left><font color=blue face=arial>Choisir date:  </font></td><td aligin=left><select name=day>";  
            getoption(1, 31, date("d"));  
            echo "</select><select name=month>";  
            getoption(1, 12, date("m"));  
            echo "</select><select name=year>";  
            getoption(1970, 2020, date("Y"));  
            echo "</select></td>  
        </tr>  
        <tr>  
            <td aligin=left><font color=blue face=arial>Additionner</font></td><td aligin=left><select name=compute><option value=add>+<option value=sub>-</select>  
        <input type=text name=days size=4 maxlength=4><font color=blue face=arial> jour(s)</font></td>  
        </tr>  
        <tr>  
            <td aligin=left><font color=blue face=arial>Format de sortie:  </font></td><td aligin=left><select name=output><option value=\"d-m-Y\">dd-mm-YYYY<option value=\"l, d M Y\">weekday, dd mm yyyyy</select></td>  
        </tr>  
          
        <tr>  
            <td aligin=left colspan=2><input type=submit name=submit value=Calculer></td>  
        </tr>  
         </table>  
          
          
    </td></tr></table></form>";  
    
    function getoption($start, $end, $if) {  
        for ($i=$start;$i<=$end;$i++) {  
            echo "<option value=$i"; if ($i == $if) { echo " selected";} echo ">$i";  
        }  
    }  
    
    ?> 
    
    0
    1. amenosyla Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
       
      j'ai recopié ce code et là ça ne calcule plus
      0
  2. Alain_42 Messages postés 5413 Statut Membre 904
     
    J'ai rectifié un peu ton code, chez moi ça marche nickel

    les valeurs des arguments dans les balises HTML doivent tous être entre "
    dans les listes <select il faut <option value="....">xxxxxx</option>

    et mis un echo pour voir si on passe bien dans le if

    <?php 
    //fonction php
    	function getoption($start, $end, $if) {  
    		 for ($i=$start;$i<=$end;$i++) {  
    			  echo "<option value=$i"; if ($i == $if) { echo " selected";} echo ">$i</option>";  
    		 }  
    	} 
    //fin fonction
     
    if (isset($_POST['submit']) && $_POST['submit'] == 'Calculer') {
    	
        extract($_POST); //transforme tous les $_POST des champs en une variable correspondante au nom du champ
    			 // TEST
    			echo "date saisie :".$day."-".$month."-".$year;
    				//fin TEST
    	 //en passant par le timestamp ça résoud le pb des mois 30 / 31 / 28 /29
    	 //calcul du timestamp date saisie
    	 $timestamp_date_saisie=mktime (0,0,0,$month,$day,$year);
    	 if ($compute == 'sub') { 
    		$timestamp_date_calculee=$timestamp_date_saisie - ($days*3600*24);
        } elseif ($compute == 'add') {  
          $timestamp_date_calculee=$timestamp_date_saisie + ($days*3600*24); 
        }
    	 
        $resultat = date($output,$timestamp_date_calculee); //ceci est la date calculée  
    	 //ce n'est pas très judicieux de choisir des noms de variables correspondant a des noms réservés php comme echo etc....
    }  
    
    ?>  
    <form name="form1" action="" method="post">  
    <table border="0" cellspacing="1" cellpadding="2" bgcolor="blue" width="300">  
    	<tr>  
    		<td bgcolor="blue"><font color="white" face="arial"><b>Date Calculée
    <?php 
    			if (!empty($resultat)) {echo " - Résultat: ".$resultat;}
     ?>
    			</b></font></td>  
    	</tr>  
    	<tr>  
    		<td bgcolor="white">  
    			<table border=0 cellpadding=3 cellspacing=0>  
    				<tr>  
    					<td aligin="left"><font color="blue" face="arial">Choisir date:  </font></td>
    					<td aligin="left">
    						<select name="day">
    <?php 					
    					  getoption(1, 31, date("d"));  
    					  echo "</select><select name=month>";  
    					  getoption(1, 12, date("m"));  
    					  echo "</select><select name=year>";  
    					  getoption(1970, 2020, date("Y"));  
    					  echo "</select></td>";
    ?>		  
        </tr>  
        <tr>  
            <td aligin="left"><font color="blue" face="arial">Additionner</font></td>
    		  <td aligin="left">
    				<select name="compute">
    					<option value="add">+</option>
    					<option value="sub">-</option>
    				</select>  
    				<input type="text" name="days" size="4" maxlength="4"><font color="blue" face="arial"> jour(s)</font>
    			</td>  
        </tr>  
        <tr>  
            <td align="left"><font color="blue" face="arial">Format de sortie:  </font></td>
    		  <td align="left">
    				<select name="output">
    					<option value="d-m-Y">dd-mm-YYYY</option>
    					<option value="l, d M Y">weekday, dd mm yyyyy</option>
    				</select>
    			</td>  
        </tr>  
          
        <tr>  
            <td aligin="left" colspan="2"><input type="submit" name="submit" value="Calculer"></td>  
        </tr>  
      </table>  
          
          
    </td>
    </tr>
    </table>
    </form>
    
    0
  3. Alain_42 Messages postés 5413 Statut Membre 904
     
    Et aussi, tu n'avait peut être pas modifié la ligne:

    <td bgcolor=blue><font color=white face=arial><B>Date Calculée"; if (!empty($echo)) {echo " - Résultat: $echo";} echo "</B></font></td>

    par:

    <td bgcolor=blue><font color=white face=arial><B>Date Calculée";
     if (!empty($resultat)) {echo " - Résultat: $resultat";}
     echo "</B></font></td>
    0