Les phases de la lune

Description

Calcul des phases de la lune entre le 06/01/2000 et le 31/12/2199.
Controlé sous IE 7 et Opéra 9.26

Source / Exemple :


// Fichier JavaScript LGH

function calcul() {
    if (text3.value == '' || text3.value < 2000 || text3.value > 2199 || text1.value == '' || text1.value < 1 || text1.value > 31 || text2.value == '' || text2.value < 1 || text2.value > 12) alert('Les calculs ne sont faits que pour des dates libéllées normalement et comprises en le 06/01/2000 et le 31/12/2199 !');
    else if (text2.value == 2 && text1.value > 29 || text2.value == 4 && text1.value > 30 || text2.value == 6 && text1.value > 30 || text2.value == 9 && text1.value > 30 || text2.value == 11 && text1.value > 30) alert('Les calculs ne sont faits que pour des dates libéllées normalement et comprises en le 06/01/2000 et le 31/12/2199 !');
    else if (text2.value == 2 && eval(text3.value / 4) != Math.round(eval(text3.value / 4)) && text1.value > 28) alert('Les calculs ne sont faits que pour des dates libéllées normalement et comprises en le 06/01/2000 et le 31/12/2199 !');
    else {
        a = eval(text1.value);
        b = eval(text2.value - 1);
        if (b == 11) c = 334;
        if (b == 10) c = 304;
        if (b == 9) c = 273;
        if (b == 8) c = 243;
        if (b == 7) c = 212;
        if (b == 6) c = 181;
        if (b == 5) c = 151;
        if (b == 4) c = 120;
        if (b == 3) c = 90;
        if (b == 2) c = 59;
        if (b == 1) c = 31;
        if (b < 1) c = 0;
        e = eval(text3.value - 2000);
        f = e / 4;
        if (f == Math.floor(f) && text2.value > 2) f = Math.floor(f) + 1;
        else f = Math.floor(f);
        g = e * 365 + f + a + c;
        if (text2.value > 2 && text3.value >= 2100) g = g - 1; //nbr de jours entiers qui sépare la date en cours du 1er janvier 2000 0h UTC
        h = eval(((g - 5.76) * 86400) / 2551443); //Correction par rapport à la date de la nouvelle lune du 6/01/00, traduction des jours en seconde et calcul du nbr de lunaisons.
        i = Math.round((h - Math.floor(h)) * 100) / 100;
        if (i <= 0.05 || i >= 0.95) i = "Période de nouvelle lune<br\/><br\/><img src=\"lune1.jpg\" name=\"img73\" alt=\"Période de nouvelle lune\">";
        if (i <= 0.55 && i >= 0.45) i = "Période de pleine lune<br\/><br\/><img src=\"lune3.jpg\" name=\"img74\" alt=\"Période de pleine lune\">";
        if (i < 0.45 && i > 0.05) i = "Période de lune ascendante<br\/><br\/><img src=\"lune2.jpg\" name=\"img75\" alt=\"Période de lune ascendante\">";
        if (i < 0.95 && i > 0.55) i = "Période de lune descendante<br\/><br\/><img src=\"lune4.jpg\" name=\"img76\" alt=\"Période de lune descendante\">";
        document.getElementById('div').innerHTML =
        '<P>Somme des jours entiers ou non du mois écoulé à la date visée = ' + a + '</P>' +
        '<P>Somme des mois entiers de la date visée = ' + b + '</P>' +
        '<P>Somme des jours des mois entiers de la date visée sans 29/02 avec étalonnage sur le 06/01/2000 = ' + c + '</P>' +
        '<P>Somme des années depuis 2000 jusqu\'à la date choisie = ' + e + ' ans</P>' +
        '<P>Somme des années bisextiles avant la date visée = ' + Math.floor(f) + ' soit ' + f + ' jours de plus.</P>' +
        '<P>Total des jours entiers ou non de 01/01/2000 jusqu\'à la date visée y compris les 29/02 = ' + g + '</P>' +
        '<P>Nombre de lunaisons = ' + Math.round(h * 100) / 100 + '</P>' +
        '<P>Phase de la lune à la date visée</P>' + i;
    }
}

Conclusion :


Un exemple dans le zip

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.