Aide script date

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. 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
    1. 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
      1. <?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. j'ai recopié ce code et là ça ne calcule plus
          0