astro-fr.net
26/12/2003, 01h16
Salut, comme promis, voici le code PHP pour calculer et afficher la phase de la Lune sous forme de petite image.
Vous pouvez voir ce que ça donne ici (http://www.astro-fr.net/phaselune.php) :) Et télécharger le script là (http://www.astro-fr.net/lune.zip).
J'espère qu'il n'y a pas trop de bugs ... en tout cas ça marche chez moi :D
Bon code à toutes et à tous :)
<?php
define("SYNODIC", 29.53058867); //constante pour la période synodique
define("MSPARJOUR", 24 * 60 * 60 * 1000); //constante pour le nombre de millisecondes par jour
function CalcPhase() {
$DateRef = mktime(8,53,0,7,29,2003); //date de référence : le 29/07/2003 à 6:53:00 GMT il y a eu une pleine lune
$Aujourdui = mktime(); //date du jour
$msDiff = ($Aujourdui - $DateRef)*1000 + MSPARJOUR; //on calcule la différence en millisecondes
$phase = ($msDiff * 100)/(SYNODIC * MSPARJOUR); //on calcule le pourcentage de la phase
while($phase>100) // tant que c'est supérieur à 100, on retire 100
{
$phase -= 100;
}
return $phase;
}
function ImgPhase($phase) {
$NumImage = round(29 * $phase / 100, 0); // on convertit le pourcentage en age de la lune (sur 29 jours)
if($NumImage==0) $NumImage==1;
$ImagePhase = 'day'.$NumImage.'.GIF';
return $ImagePhase;
}
function PartEntier($phase) {
if ( $phase <= 50.0 )
{
$plein = $phase * 2;
}
else
{
$plein = ( 100 - $phase ) * 2;
}
return $plein;
}
function NommerPhase($phase)
//convertit le pourcentage de lunaison en mots
{
if($phase >= 0 && $phase <= 2.49)
{
$NomPhase = "Nouvelle Lune";
}
else if($phase >= 2.5 && $phase <= 22.49)
{
$NomPhase = "Premier Croissant";
}
else if($phase >= 22.5 && $phase <= 27.49)
{
$NomPhase = "Premier Quartier";
}
else if($phase >= 27.5 && $phase <= 47.49)
{
$NomPhase = "Lune gibbeuse";
}
else if($phase >= 47.5 && $phase <= 52.49)
{
$NomPhase = "Pleine Lune";
}
else if($phase >= 52.5 && $phase <= 73.49)
{
$NomPhase = "Lune gibbeuse";
}
else if($phase >= 73.5 && $phase <= 77.49)
{
$NomPhase = "Dernier quartier";
}
else if($phase >= 77.5 && $phase <= 97.49)
{
$NomPhase = "Dernier croissant";
}
else
{
$NomPhase = "Nouvelle Lune";
}
return $NomPhase;
}
function JoursAvantNL($phase) { //calcule le nombre de jours avant la nouvelle Lune
$val = round((1 - $phase / 100) * SYNODIC,2);
return $val;
}
function JoursAvantPL($pourcentagePL) { //calcule le nombre de jours avant la pleine Lune
$val = round((1 - $pourcentagePL / 100) * SYNODIC,2);
return $val;
}
?>
Vous pouvez voir ce que ça donne ici (http://www.astro-fr.net/phaselune.php) :) Et télécharger le script là (http://www.astro-fr.net/lune.zip).
J'espère qu'il n'y a pas trop de bugs ... en tout cas ça marche chez moi :D
Bon code à toutes et à tous :)
<?php
define("SYNODIC", 29.53058867); //constante pour la période synodique
define("MSPARJOUR", 24 * 60 * 60 * 1000); //constante pour le nombre de millisecondes par jour
function CalcPhase() {
$DateRef = mktime(8,53,0,7,29,2003); //date de référence : le 29/07/2003 à 6:53:00 GMT il y a eu une pleine lune
$Aujourdui = mktime(); //date du jour
$msDiff = ($Aujourdui - $DateRef)*1000 + MSPARJOUR; //on calcule la différence en millisecondes
$phase = ($msDiff * 100)/(SYNODIC * MSPARJOUR); //on calcule le pourcentage de la phase
while($phase>100) // tant que c'est supérieur à 100, on retire 100
{
$phase -= 100;
}
return $phase;
}
function ImgPhase($phase) {
$NumImage = round(29 * $phase / 100, 0); // on convertit le pourcentage en age de la lune (sur 29 jours)
if($NumImage==0) $NumImage==1;
$ImagePhase = 'day'.$NumImage.'.GIF';
return $ImagePhase;
}
function PartEntier($phase) {
if ( $phase <= 50.0 )
{
$plein = $phase * 2;
}
else
{
$plein = ( 100 - $phase ) * 2;
}
return $plein;
}
function NommerPhase($phase)
//convertit le pourcentage de lunaison en mots
{
if($phase >= 0 && $phase <= 2.49)
{
$NomPhase = "Nouvelle Lune";
}
else if($phase >= 2.5 && $phase <= 22.49)
{
$NomPhase = "Premier Croissant";
}
else if($phase >= 22.5 && $phase <= 27.49)
{
$NomPhase = "Premier Quartier";
}
else if($phase >= 27.5 && $phase <= 47.49)
{
$NomPhase = "Lune gibbeuse";
}
else if($phase >= 47.5 && $phase <= 52.49)
{
$NomPhase = "Pleine Lune";
}
else if($phase >= 52.5 && $phase <= 73.49)
{
$NomPhase = "Lune gibbeuse";
}
else if($phase >= 73.5 && $phase <= 77.49)
{
$NomPhase = "Dernier quartier";
}
else if($phase >= 77.5 && $phase <= 97.49)
{
$NomPhase = "Dernier croissant";
}
else
{
$NomPhase = "Nouvelle Lune";
}
return $NomPhase;
}
function JoursAvantNL($phase) { //calcule le nombre de jours avant la nouvelle Lune
$val = round((1 - $phase / 100) * SYNODIC,2);
return $val;
}
function JoursAvantPL($pourcentagePL) { //calcule le nombre de jours avant la pleine Lune
$val = round((1 - $pourcentagePL / 100) * SYNODIC,2);
return $val;
}
?>