Auteur Sujet: Calculer L'age Du Capitaine  (Lu 1528 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Arnaud41

  • Débutant
  • *
  • Messages: 30
Calculer L'age Du Capitaine
« le: 23 mai 2004 à 22:25:47 »
Bonjour à tous.
J'essaie de caluler l'age d'un personne en fonction de la date de naissance saisie.
J'ai fait ca :

$t1 = mktime(0, 0, 0, 05, 24, 1986);
$t2 = time();
$age = $t2 + ($t1*(-1));
$age2=floor($age/(365.25*24*3600));
echo "$t1<br>";
echo "$t2<br>";
echo "$age<br>";
echo "$age2<br>";

Le truc c'est que ca marche pas pour toutes les années :
Si par exemple je mets en date de naissance le
22/05/1984 ---> 20 ans c'est bon
23/05/1984 ---> 20 ans c'est bon
24/05/1984 ---> 19 ans c'est bon

Maintenant avec l'année 1986
22/05/1986 --->  18 ans c'est bon
23/05/1986 --->  18 ans c'est bon
24/05/1986 --->  18 ans c'est PAS BON
25/05/1986 --->  17 ans cette fois c'est bon.

Pourquoi ce décalage ? J'ai pourtant bien pris en compte les années bissextiles.

Merci d'avance

Hors ligne Tigexo

  • Débutant
  • *
  • Messages: 94
Calculer L'age Du Capitaine
« Réponse #1 le: 23 mai 2004 à 23:14:57 »
j ai pas fait super gaffe a ton script mais pourquoi n essaye tu pas ceci

function date_diff($date1, $date2)
{
//$date1  
//$date2  

$d1 = explode("-", $date1);
$y1 = $d1[0];
$m1 = $d1[1];
$d1 = $d1[2];

$d2 = explode("-", $date2);
$y2 = $d2[0];
$m2 = $d2[1];
$d2 = $d2[2];

$date1_set = mktime(0,0,0, $m1, $d1, $y1);
$date2_set = mktime(0,0,0, $m2, $d2, $y2);

return(round(($date2_set-$date1_set)/(60*60*24)));
}

Tu aurais le nombre de jour qui separent les deux dates et a partir de la tu pourrais faire une division entiere pour connaitre le nombre d années (entières) qui séparent les deux dates ...  
Webmaster de la Ligue CS Belge
http://www.csligue.be

Hors ligne Arnaud41

  • Débutant
  • *
  • Messages: 30
Calculer L'age Du Capitaine
« Réponse #2 le: 24 mai 2004 à 23:25:43 »
Heu ben en fait j'ai trouvé mais merci quand meme.
Ma soluce :

<?php
 
//ici date de naissance saisie
$jnaiss = '25';
$mnaiss = '05';
$anaiss = '1986';

// date de naissance
$t1 = mktime(0, 0, 0, $mnaiss, $jnaiss, $anaiss);
$xt1=date("d/m/Y",$t1);
//date du jour
$t2 = mktime (0,0,0,date(m),date(d),date(y));
$xt2=date("d/m/Y",$t2);
//date du jour moins 18 ans
$t3 = mktime (0,0,0,date(m),date(d),date(y)-18);
$xt3=date("d/m/Y",$t3);
 
echo "Votre date de naissance : ".$xt1."<br>";
echo "La date du jour : ".$xt2."<br>";
echo "La date du jour moins 18 ans : ".$xt3."<br>";

$age = $t2 - $t1;
$age2=floor($age/(365.25*24*3600));
echo "Vous avez ".$age2." ans<br>";

if ($t3>=$t1)
{
 $message="Vous etes donc majeur";
}
else
{
 $message="Vous etes donc mineur";
}
echo $message;

?>

Hors ligne Jmoati

  • Connaisseur
  • ***
  • Messages: 282
Calculer L'age Du Capitaine
« Réponse #3 le: 25 mai 2004 à 19:07:30 »
C'est pour un site *animale rose* ou quoi ton truc ?  :lol:  

Hors ligne Tigexo

  • Débutant
  • *
  • Messages: 94
Calculer L'age Du Capitaine
« Réponse #4 le: 26 mai 2004 à 01:24:49 »
Il y a encore juste un petit probleme dans ton script si on veut etre puriste  :rolleyes:

En effet je ne doute aucunement que ton script fonctionne, oui IL FONCTIONNE mais pas dans tous les cas je pense. En effet, si je me rappelle bien et j en suis meme presque sur, la fonction mktime() donne un entier de type long qui coresspond au temps ecoule en secondes entre le premier janvier 1970 et la date spécifiée (+h + sec).

Donc il est logique d en deduire que ton script risque de rencontrer des problemes si la personne qui utilise ton script est née avant le premier janvier 1970.
Il va donc falloir que tu incorpores dans ton script une condition : si l annee est inferieure a 1970 alors il faut remonter dans le temps -> calculer le temps entre le 1er janv 1970 et la date d annif du gars en "remontant dans le temps" et l ajouter au temps ecoule depuis le 1er janv 1970 et la date actuelle.

Bon je ne suis pas toujours tres clair, mieux vaut un script que de longs discours  :D Je pense que dans le script qui suit tu pourras trouver une esquisse de solution a ce probleme  :rolleyes:

Script provenant de : http://be.php.net/manual/fr/function.mktime.php
(tu pourras trouver encore qques exemples a l adresse sus-mentionée)
<?PHP

   function &mktime ($hour = false, $minute = false, $second = false, $month = false, $date = false, $year = false)
   {
       // For centuries, the Egyptians used a (12 * 30 + 5)-day calendar
       // The Greek began using leap-years in around 400 BC
       // Ceasar adjusted the Roman calendar to start with Januari rather than March
       // All knowledge was passed on by the Arabians, who showed an error in leaping
       // In 1232 Sacrobosco (Eng.) calculated the error at 1 day per 288 years
       //    In 1582, Pope Gregory XIII removed 10 days (Oct 15-24) to partially undo the
       // error, and he instituted the 400-year-exception in the 100-year-exception,
       // (notice 400 rather than 288 years) to undo the rest of the error
       // From about 2044, spring will again coincide with the tropic of Cancer
       // Around 4100, the calendar will need some adjusting again
  
       if ($hour === false)  $hour  = Date ("G");
       if ($minute === false) $minute = Date ("i");
       if ($second === false) $second = Date ("s");
       if ($month === false)  $month  = Date ("n");
       if ($date === false)  $date  = Date ("j");
       if ($year === false)  $year  = Date ("Y");
  
       if ($year >= 1970) return mktime ($hour, $minute, $second, $month, $date, $year);
  
       //    date before 1-1-1970 (Win32 Fix)
       $m_days = Array (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
       if ($year % 4 == 0 && ($year % 100 > 0 || $year % 400 == 0))
       {
           $m_days[1] = 29; // non leap-years can be: 1700, 1800, 1900, 2100, etc.
       }
  
       //    go backward (-), based on $year
       $d_year = 1970 - $year;
       $days = 0 - $d_year * 365;
       $days -= floor ($d_year / 4);          // compensate for leap-years
       $days += floor (($d_year - 70) / 100);  // compensate for non-leap-years
       $days -= floor (($d_year - 370) / 400); // compensate again for giant leap-years
          
       //    go forward (+), based on $month and $date
       for ($i = 1; $i < $month; $i++)
       {
           $days += $m_days [$i - 1];
       }
       $days += $date - 1;
  
       //    go forward (+) based on $hour, $minute and $second
       $stamp = $days * 86400;
       $stamp += $hour * 3600;
       $stamp += $minute * 60;
       $stamp += $second;
  
       return $stamp;
   }
?>
Webmaster de la Ligue CS Belge
http://www.csligue.be

Hors ligne Arnaud41

  • Débutant
  • *
  • Messages: 30
Calculer L'age Du Capitaine
« Réponse #5 le: 26 mai 2004 à 11:56:42 »
Citer
C'est pour un site *animale rose* ou quoi ton truc ?  :lol:
 :lol:
nan c'est pas un script définitif c'etait juste pour illustrer
en fait c'est pas vraiment l'age que je veux mais savoir si la personne est majeur.
Et non c'est pas pour un site de cul  :P  

Hors ligne Arnaud41

  • Débutant
  • *
  • Messages: 30
Calculer L'age Du Capitaine
« Réponse #6 le: 26 mai 2004 à 11:58:12 »
C'est exact Tigexo ca ne marche pas si né avant 1970 !!! Je viens de m'en rendre compte justement.
Je jette un oeil à ton script.
merci !!!!!!!

Hors ligne Arnaud41

  • Débutant
  • *
  • Messages: 30
Calculer L'age Du Capitaine
« Réponse #7 le: 26 mai 2004 à 15:13:06 »
bon c'est pas tres academique mais ca marche :

<?php

//ici date de naissance saisie
$jnaiss = '27';
$mnaiss = '5';
$anaiss = '1986';

$mjnaiss = $mnaiss."-".$jnaiss;


// Date du jour
$aujourdhui = getdate();
$annee = $aujourdhui['year'];
$moisjour = $aujourdhui['mon'] . "-" . $aujourdhui['mday'];
    
$age = ($moisjour < $mjnaiss) ? $annee - $anaiss - 1 : $annee - $anaiss;
    
echo $age;
echo "<br>";

if ($age>="18")
{
 $message="Vous etes donc majeur";
}
else
{
 $message="Vous etes donc mineur";
}
echo $message;

?>

Hors ligne Ice

  • VIP
  • *****
  • Messages: 2 403
    • ATFX
Calculer L'age Du Capitaine
« Réponse #8 le: 26 mai 2004 à 15:23:13 »
Notez la date de la forme 20040526

Tu fais la soustraction des 2 et tu divises par 10000.

Puis tu compares avec 18.

Hors ligne helpmysite

  • Débutant
  • *
  • Messages: 91
    • http://www.helpmysite.net/
Calculer L'age Du Capitaine
« Réponse #9 le: 27 mai 2004 à 12:35:14 »
:lol:  
« Modifié: 27 mai 2004 à 12:37:24 par helpmysite »
*****************************
* Offre numéro 3 sur le serveur 2 *
*****************************