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

Alain_42 Messages postés 5413 Statut Membre 894
 
<?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
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
Alain_42 Messages postés 5413 Statut Membre 894
 
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
Alain_42 Messages postés 5413 Statut Membre 894
 
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