FONCTION QUI RETOURNE L'AGE AVEC LE JOUR/MOIS/ANNÉE DE NAISSANCE

FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 - 24 févr. 2007 à 13:19
cs_linkid Messages postés 100 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 8 mai 2009 - 5 mars 2007 à 21:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41620-fonction-qui-retourne-l-age-avec-le-jour-mois-annee-de-naissance

cs_linkid Messages postés 100 Date d'inscription mardi 29 novembre 2005 Statut Membre Dernière intervention 8 mai 2009
5 mars 2007 à 21:28
Pourquoi ne pas mettre un OU alors ?

function EstBissextile($annee) {
return ( (int) $annee%4 === 0 OR $annee%400 !== 0 );
}
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
26 févr. 2007 à 17:19
Pour faire vraiment optimisé, il faudrait voir si $annee%4 === 0 renvoit plus souvent FALSE que $annee%400 !== 0.

Car si c'est $annee%400 !== 0 qui fait plus souvent FALSE, il faut la placer en première dans l'instruction. Un FALSE dans un ET renvoit toujours FALSE et les instructions qui suivent ne sont pas exécuté du tout.

D'où un petit gain en performance :p
(jme change en Antho ^^)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
26 févr. 2007 à 17:16
rho oui en plus :p
Quel boulet ^^

Pour faire vraiment épuré, ca donnerait un truc dans le genre :

function EstBissextile($annee) {
return ( (int) $annee%4 === 0 && $annee%400 !== 0 );
}

7 lignes en 1 seule :)
C'est beau la prog par moment ^^
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
26 févr. 2007 à 16:57
function EstBissextile($annee) {
return ( $annee%4 == 0 && $annee%400 != 0 ) ? TRUE : FALSE;
}


Rooooooo... FhX voyons... .. .

function EstBissextile($annee)
{
return (($annee%4) === 0 && ($annee%400) !== 0);
}

@ tchaOo°

ps : perso je rajouretais un cast au début de la fonction... .. .
webdeb Messages postés 488 Date d'inscription samedi 5 avril 2003 Statut Membre Dernière intervention 31 mars 2009 4
25 févr. 2007 à 19:35
Au passage, les bonnes balises PHP c'est <?php et non <?
Thomas Dellasantina Messages postés 1 Date d'inscription vendredi 23 février 2007 Statut Membre Dernière intervention 25 février 2007
25 févr. 2007 à 13:49
Oui en effet je me suis bien trompé...

(Source Wikipédia)
Depuis l'instauration du calendrier grégorien, sont bissextiles :
1. les années divisibles par 4 mais non divisibles par 100
2. les années divisibles par 400

Je corrige tout ça dans le code... :)
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
24 févr. 2007 à 22:53
Saell og blesuð

Autrement j'approuve les remarques de FhX :)

Vilhjálms Sigurðsdóttir aka Frëyjá
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
24 févr. 2007 à 22:52
Saell og blesuð

il me semblait que la verification du modulo de 100 etait egalement utile pour savoir si une annee etait bissextile ?

<?php
function EstBissextile ($annee) {
return (($annee % 4 == 0) && (($annee % 100 != 0) || ($annee % 400 == 0)));
}

$annee = 2002;
if (EstBissextile($annee)) {
echo $annee.' est bissextile.';
}else{
echo $annee.' n\'est pas bissextile.';
}
?>

Les années divisibles par 4 sont bissextiles, pas les autres.
Exception : les années divisibles par 100 ne sont pas bissextiles.
Exception à l'exception (!) : les années divisibles par 400 sont bissextiles.

Mais je me trompe peut etre ?

Vilhjálms Sigurðsdóttir aka Frëyjá
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
24 févr. 2007 à 13:19
beaucoup d'optimisations possibles :)

# function EstBissextile($annee) // RETOURNE 1 SI L'ANNEE EST BISSEXTILE
# {
# $modulo4 = $annee%4;
# $modulo400 = $annee%400;
#
# if($modulo4 == 0 AND $modulo400 != 0)
# $bissextile = 1;
# else
# $bissextile = 0;
#
# return $bissextile;
# }

>
function EstBissextile($annee) {
return ( $annee%4 == 0 && $annee%400 != 0 ) ? TRUE : FALSE;
}

# if($jour > $jour_actuel) // Un mois en moins
# $nbr_mois = 12 - ($mois - $mois_actuel) - 1;
# else
# $nbr_mois 12 - ($mois - $mois_actuel);
>
$nbr_mois = ( $jour > $jour_actuel ) ? 12 - ($mois - $mois_actuel) - 1 : 12 - ( $mois - $mois_actuel );

# for($i = 0 ; $i < $nbr_annees ; $i++)
# {
# $annee_i = $annee+$i;
# if(EstBissextile($annee_i))
# $age_en_jours += 366;
# else
# $age_en_jours += 365;
# }

>
for ( $i=0, $annee_i=$annee; $i<$nbr_annee; $i++, $annee++) {
$age_en_jours += ( EstBissextile($annee_i) ) ? 366 : 365;
}


Y'a de quoi faire :)
Rejoignez-nous