Script [JS] calcul de l'age (avec mois + age)

Résolu/Fermé
sommaille Messages postés 63 Date d'inscription mardi 21 décembre 2010 Statut Membre Dernière intervention 16 avril 2016 - 11 déc. 2011 à 18:49
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 21 janv. 2013 à 13:47
Bonjour,


Je souhaiterais avoir un script qui mettrais les informations suivantes :

J'ai 0 ans et 10 mois
(mais que cela ce fasse automatiquement) et que si l'age est 0 ans et 12 mois, cela passe a 1ans et 0 mois.

Je voudrais faire ce script de naissance avec cette date de naissance : 04/11/2011.


Merci bcp de votre aide !

Cordialement,

31 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
17 janv. 2013 à 09:26
Je ne t'avais donné que la partie modiifée
pour ta question, avec du CSS, c'est possible, il faut mettre une class= dans les input

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
	<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<script type="text/javascript">
function calcul_age(id_naissance,id_reponse){	
	var date_naissance=document.getElementById(id_naissance).value;
	//l'appel de la fonction se fait a chaque chiffre tapé, on verifie donc que tous les chiffres de la date ont été tapés pour faire le calcul
	var reg=new RegExp("^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$","i");
	if(reg.test(date_naissance)){
	var elem_n = date_naissance.split('/');
		jour_n = parseFloat(elem_n[0]);
		mois_n = parseFloat(elem_n[1]);
		annee_n = parseFloat(elem_n[2]);
	
	var date_day = new Date();
		jour_day = date_day.getDate();
		mois_day = date_day.getMonth()+1;
		annee_day = date_day.getFullYear();
	
	//calcul age
	var ans; var mois; var age="";
	
	if(mois_day >= mois_n){
	
		ans =  annee_day - annee_n;
		mois= mois_day - mois_n;
	}else{
		ans =  (annee_day - annee_n) -1;
		mois= mois_day +( 12 - mois_n);
	}
	if(jour_day < jour_n){	
		mois= mois -1;			
	}
	
	if(ans >0 && ans <=1) age += ans+' an ';
	if(ans >1) age += ans+' ans ';
	if(mois >0) age +=mois+' mois ';
	if(ans==0 && mois>=0 && mois <= 3){
		//si moins de 1 an et moins de 3 mois on affiche aussi les jours
		jours=jour_day - jour_n;
		age +=jours+' jours ';
	}
	 // on affiche le résultat
	document.getElementById(id_reponse).innerHTML = age;
	}else{	
		return false;
	}
}
//fonction qui se lance au chargement de la page pour faire le calcul pour tous les champs input
function calculer_tout(){
	array_input=document.getElementsByTagName('input');
	for (i=0;i< array_input.length;i++){
		var id_naissance=array_input[i].id;
		var id_age='a_'+array_input[i].id.split('_')[1];		
		//lance la fonction calcul pour tous les champs
		calcul_age(id_naissance,id_age);
	}
}
</script>
<style type="text/css">
.input_date_naissance {
   /* tu mets les valeurs que tu veux */
	width:60px;
	font-size:11px;
	background-color:#75BDB4; /*code couleur HTML*/
	/* marge avant et apres l'input */
	margin-left:5px;
	margin-right:5px;
}
</style>
</head>
<body onload="calculer_tout();">
<!-- 
attention bien garder le format de id=d_1  d_2  d_3 etc.. pour la date de naissance
et id= a_1  a_2 a_3 etc.. pour l'age

readonly c'est pour que le champ ne soit pas modifiable par l'internaute 
--> 

toutou 1 né le:<input type="text" name="date_naissance1" id="d_1" value="14/02/2005" class="input_date_naissance" readonly /> age:<span id="a_1"></span>
<br /><br />
toutout 2 né le<input type="text" name="date_naissance2" id="d_2" value="17/05/2005" class="input_date_naissance"  readonly  /> age:<span id="a_2"></span>
<br /><br />
toutout 3 né le<input type="text" name="date_naissance3" id="d_3" value="11/01/2013" class="input_date_naissance"  readonly  /> age:<span id="a_3"></span>
<br /><br />
toutout 4 né le<input type="text" name="date_naissance3" id="d_4" value="11/11/2012" class="input_date_naissance"  readonly  /> age:<span id="a_4"></span>

</body>
</html>
0
Caro Isaana Messages postés 16 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 21 janvier 2013
17 janv. 2013 à 15:54
Un grand merci Alain-42 pour ton script : c'est purement génial, ca marche parfaitement. Comme tu le marques , je me suis amusée à changer certaines valeurs :
- couleur fond,
- couleur police,
- taille police
- style police
- largeur 'cadre'
- sans bordure autour du cadre
bref, j'ai fait à ma sauce pour que ca s'intégre comme je le voulais.

Je crois un peu comprendre maintenant la différence entre le language javascript et le language php, en tout cas, cela m'a permis de voir que pour ce que l'on veut obtenir on utilise l'un ou l'autre.

Tu es informaticien ? Vraiment un grand bravo et un grand merci, tu ne peux pas savoir combien tes lumieres vont me simplifier le travail !!!.

En fait, j'avais ouvert un post pour ma question il y a quelques jours, avec pour sujet (d'ailleurs je m'apercois maintenant que l'objet et mon texte n'était pas suffisamment clair) : Script pour changer un texte en fonction des dates.
2 personnes m'avaient gentiment répondu, une me conseillait de créér une base de données, j'avoue que le language MySQL est du chinois pour moi. J'ai essayé pendant 2 jours de potasser, et puis j'ai trouvé ce post.
Est-ce que je dois retourner sur post pour marquer que tu as trouvé la solution et que le sujet est 'résolu' ?
Et pareil pour ce post , il faut mette 'résolu' ?

Encore merci pour ta patience !
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
17 janv. 2013 à 21:12
php et javascript:

la différence:
- php s'exécute coté serveur lorsque tu demande une page
- javascript s'exécute côté client donc dans la navigateur sur un événement (onload, onclick par exemple)
0
Caro Isaana Messages postés 16 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 21 janvier 2013
20 janv. 2013 à 14:24
Bonjour Alain-42 (et à tous),

dis, je te contacte pour 2 choses :

Toutes les dates sont bonnes,
sauf
là je viens de voir 2 erreurs :
pour : 25/01/2007 il me dit 6 ans (alors que le résultat exact est 5 ans 11 mois)
pour : 25/01/2006 il me dit 7 ans (alors que le résultat exact est 6 ans 11 mois)
Apparemment il a un probleme avec le mois de janvier.

Sinon, la 2eme chose pour laquelle je te contacte,
c'est que si tu veux bien m'aider, j'aurai encore besoin de tes lumieres...

Sur les pedigrees, j'ai compris grace à toi comment faire pour calculer l'âge du chien, automatiquement.

Mais sur mes pedigrees, il y a 2 autres choses, :

- Il y a aussi les âges de déces que je donne avec ce que l'on appelle l'AOD (Age of death), c'est à dire, par exemple : Chien 1 : (10/01/2002 - 10/03/2012) : il a vécu 10 ans 2 mois. Je marque (10/01/2002 - 10/03/2012) - AOD 10.2
Donc ca je peux le mettre définitivement sur mes pages, puisque ca ne change pas, donc pas besoin de script (sauf que ca serait évidemment plus simple s'il y avait un script qui me calcule ca (l'age en année et en mois, d'une date à une autre, pas comme le script précédent qui calcule l'âge en fonction d'une date à la date de ce jour).

- il y a aussi la moyenne de longévité : c'est à dire que l'on reprend tous les âges que l'on connait (parfois on ne sait rien sur certains chiens), et donc on prend par exemple : chien 1 - en vie = 2 ans 6 mois (le script que tu m'as fait), et chien 2 : décédé (10/01/2002 - 10/03/2012) - AOD 10.2 et on additionne tous les chiffres, donc 2 ans 6 mois + 10 ans 2 mois = 12 ans 8 mois et on divise par ces 2 chiens (12 ans 8 mois / 2 = 6 ans 4 mois), et je marque la moyenne : 6 ans 4 mois.

D'ou ma question : est-ce que tu peux m'aider à concocter un script pour ces moyennes ? Est-ce possible et si oui, même avec les données des âges de déces que je calcule moi-meme ou faut-il aussi faire un script pour ces âges ?

Bref, j'ai encore besoin de toi si tu peux m'aider.

D'avance un grand merci.
Bon dimanche
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
20 janv. 2013 à 15:38
pour ces deux dates c'est un peu normal puisque la date anniversaire n'est pas atteinte.
Sion on peu faire un script qui arrondi à l'age supérieur mais à partir de combien de jour avant la date anniversaire
Ou alors on mets le nombre de jours ex: 6ans 11 mois 25jours

Pour ton autre question, si tu veux mettre en dur un age AOD, il faudrait utiliser php, est ce que dans ton site tu utilises déja ce langage ?
0
Caro Isaana Messages postés 16 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 21 janvier 2013
20 janv. 2013 à 16:41
Ben, je ne sais pas.....Ce n'est pas catastrophique si ca fait ca parce que date n'est pas atteinte, peut-être ca serait mieux de préciser les jours(mais uniquement dans ces cas, la date anniversaire, pas à toutes les dates. Si ce n'est pas possible, mieux vaut laisser comme au départ.

Euh,pour le php, non, je n'en n'utilise pas encore. Pourquoi est-ce différent du js ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
21 janv. 2013 à 09:19
oui le php s'exécute côté serveur
le javascript coté client (navigateur: Firefox, InternetExplorer etc...)

le php est interprétété lors de l'appel de la page dans le serveur; ses instructions s'éxécutent et le résultat des calcul va modifié la page qui est envoyée au client. Ca permet de faire un site dynamique et aussi si besoin d'utiliser une base de données.
0
Caro Isaana Messages postés 16 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 21 janvier 2013
21 janv. 2013 à 10:00
Merci pour ta réponse,
mais bon, tu as pu voir que mon niveau est 'limité'......
donc je comprends ce que tu veux me dire, sauf que je n'arrive pas à l'interprété :

en gros, ca veut dire quoi pour moi ? que c'est plus compliqué pour moi à mettre en place ? Plus difficile à concevoir ? Qu'il vaut mieux que je laisse tomber ?

Merci pour ton aide !
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
21 janv. 2013 à 11:30
je t'ai fait la même chose en php, l'avantage par rapport au JS c'est qu'avec IE l'internaute n'aura pas a cliquer sur le bouton autoriser les scripts...

par contre pour toi il faut
- modifier le nom de ta page xxxx.html en xxxx.php
- modifier le menu ou le lien qui permet d'accéder à la page
- et pour tester tu ne pourra plus tester directement en local dans ton navigateur mais il faudra poser le fichier en ftp sur le serveur de ton hébergeur
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
	<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">

<style type="text/css">
.input_date_naissance {
	width:60px;
	font-size:11px;
	background-color:#75BDB4; /*code couleur HTML*/
	/* marge avant et apres l'input */
	margin-left:5px;
	margin-right:5px;
}
</style>
</head>
<body>
<?php
function calcul_age($date_naiss){
	$RE=''^\d{1,2}/\d{1,2}/\d{4}$'';
	if(preg_match($RE,$date_naiss)){
		//on verifie que le format de la date est bien jj/mm/aaaa
		$array_naiss=array();
		$array_naiss = explode('/',$date_naiss);
		$jour_n = $array_naiss[0];
		$mois_n = $array_naiss[1];
		$annee_n = $array_naiss[2];
		$jour_day = date('d');
		$mois_day = date('m');
		$annee_day = date('Y');
	//calcul age
	$ans=0; $mois=0; $age="";
	if($mois_day >= $mois_n){
	
		$ans =  $annee_day - $annee_n;
		$mois= $mois_day - $mois_n;
	}else{
	//echo "<br>2:mois_d=".$mois_day." mois n=".$mois_n;
		$ans =  ($annee_day - $annee_n) -1;
		$mois= $mois_day +( 12 - $mois_n);
	}
	if($jour_day < $jour_n){	
		$mois= $mois -1;			
	}
	
	if($ans >0 && $ans <=1) $age .= $ans.' an ';
	
	if($ans >1) $age .= $ans.' ans ';
	
	if($mois >0) {
	
		$age .= $mois.' mois ';
		
	}

	if($ans==0 && $mois>=0 && $mois <= 3){
		//si moins de 1 an et moins de 3 mois on affiche aussi les jours		
		$jours=$jour_day - $jour_n;
		$age .=$jours.' jours ';
	}	
	 //on renvoit le resultat
		return $age;	
	}else{	
		return $age="Erreur de format date";
	}
}

?>
<!-- bloc toutou 1 -->
<?php
$date_naissance="14/02/2005";
$age=calcul_age($date_naissance);
?>
toutou 1 né le:<input type="text" name="date_naissance1" value="<?php echo $date_naissance; ?>" class="input_date_naissance" readonly /> age:<span class="span_age"><?php echo $age; ?></span>
<br /><br />

<!-- bloc toutou 2 -->
<?php
$date_naissance="17/05/2005";
$age=calcul_age($date_naissance);
?>

toutout 2 né le<input type="text" name="date_naissance2" value="<?php echo $date_naissance; ?>" class="input_date_naissance"  readonly  /> age:<span class="span_age"><?php echo $age; ?></span>
<br /><br />

<!-- bloc toutou 3 -->
<?php
$date_naissance="11/01/2013";
$age=calcul_age($date_naissance);
?>
toutout 3 né le<input type="text" name="date_naissance3" value="<?php echo $date_naissance; ?>" class="input_date_naissance"  readonly  /> age:<span class="span_age"><?php echo $age; ?></span>
<br /><br />

<!-- bloc toutou 4 -->
<?php
$date_naissance="11/11/2012";
$age=calcul_age($date_naissance);
?>
toutout 4 né le<input type="text" name="date_naissance3" value="<?php echo $date_naissance; ?>" class="input_date_naissance"  readonly  /> age:<span class="span_age"><?php echo $age; ?></span>

</body>
</html>
0
Caro Isaana Messages postés 16 Date d'inscription lundi 14 janvier 2013 Statut Membre Dernière intervention 21 janvier 2013
21 janv. 2013 à 13:10
Merci de m'avoir déjà concu ce php, vraiment sympa.

Alors j'ai copié ton code, j'ai enregistré sous le nom : pedigree-ages.php et je l'ai transféré sur mon serveur.
Par contre, j'ai été voir ce que ca donne et ca me donne une page blanche d'erreur avec ca :

Warning: Unexpected character in input: '\' (ASCII=92) state=1 in /homepages/18/d154130126/htdocs/pedigreeages.php on line 20

Parse error: syntax error, unexpected '{' in /homepages/18/d154130126/htdocs/pedigreeages.php on line 20

est-ce moi qui n'ait pas fait la bonne manip ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
21 janv. 2013 à 13:47
un soucis sur la verif de la date, essayes comme ça:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
	<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">

<style type="text/css">
.input_date_naissance {
	width:60px;
	font-size:11px;
	background-color:#75BDB4; /*code couleur HTML*/
	/* marge avant et apres l'input */
	margin-left:5px;
	margin-right:5px;
}
</style>
</head>
<body>
<?php
function calcul_age($date_naiss){
	//$RE=''^\d{1,2}/\d{1,2}/\d{4}$'';
	if(is_valide_date($date_naiss,'/')){
		//on verifie que le format de la date est bien jj/mm/aaaa
		$array_naiss=array();
		$array_naiss = explode('/',$date_naiss);
		$jour_n = $array_naiss[0];
		$mois_n = $array_naiss[1];
		$annee_n = $array_naiss[2];
		$jour_day = date('d');
		$mois_day = date('m');
		$annee_day = date('Y');
	//calcul age
	$ans=0; $mois=0; $age="";
	if($mois_day >= $mois_n){
	
		$ans =  $annee_day - $annee_n;
		$mois= $mois_day - $mois_n;
	}else{
	//echo "<br>2:mois_d=".$mois_day." mois n=".$mois_n;
		$ans =  ($annee_day - $annee_n) -1;
		$mois= $mois_day +( 12 - $mois_n);
	}
	if($jour_day < $jour_n){	
		$mois= $mois -1;			
	}
	if($ans >0 && $ans <=1) $age .= $ans.' an ';
	if($ans >1) $age .= $ans.' ans ';
	if($mois >0) {
		$age .= $mois.' mois ';
	}
	if($ans==0 && $mois>=0 && $mois <= 3){
		//si moins de 1 an et moins de 3 mois on affiche aussi les jours		
		$jours=$jour_day - $jour_n;
		$age .=$jours.' jours ';
	}	
	 //on renvoit le resultat
		return $age;	
	}else{	
		return $age="Erreur de format date";
	}
}
//fonction qui verifie si la date tapée est corecte
function is_valide_date($date, $sep){
	if(!list($day, $month, $year) = explode($sep, $date)){
		return false;
	}	
	if($day > 31 OR $day < 1 OR $month > 12 OR $month < 1 OR $year > 32767 OR $year < 1){
		return false;
	}
	return checkdate($month, $day, $year);
}
?>
<!-- bloc toutou 1 -->
<?php
$date_naissance="14/02/2005";
$age=calcul_age($date_naissance);
?>
toutou 1 né le:<input type="text" name="date_naissance1" value="<?php echo $date_naissance; ?>" class="input_date_naissance" readonly /> age:<span class="span_age"><?php echo $age; ?></span>
<br /><br />

<!-- bloc toutou 2 -->
<?php
$date_naissance="17/05/2005";
$age=calcul_age($date_naissance);
?>

toutout 2 né le<input type="text" name="date_naissance2" value="<?php echo $date_naissance; ?>" class="input_date_naissance"  readonly  /> age:<span class="span_age"><?php echo $age; ?></span>
<br /><br />

<!-- bloc toutou 3 -->
<?php
$date_naissance="11/01/2013";
$age=calcul_age($date_naissance);
?>
toutout 3 né le<input type="text" name="date_naissance3" value="<?php echo $date_naissance; ?>" class="input_date_naissance"  readonly  /> age:<span class="span_age"><?php echo $age; ?></span>
<br /><br />

<!-- bloc toutou 4 -->
<?php
$date_naissance="11/11/2012";
$age=calcul_age($date_naissance);
?>
toutout 4 né le<input type="text" name="date_naissance3" value="<?php echo $date_naissance; ?>" class="input_date_naissance"  readonly  /> age:<span class="span_age"><?php echo $age; ?></span>

</body>
</html>
0