Depuis déjà fort longtemps, certaines applications DOS, fournissait la possibilité d'obtenir les phases lunaires lorsqu'on consultait leur calendrier comme en fait fois la capture du MonsterBook :
Pourtant, même s'il ne s'agit que de convertir une date Julienne en Grégorienne pour ensuite calculer à tous les 30 jours (plus exactement 29,53058) la lune revenant inlassablement, les systèmes d'exploitation ne l'indique pas! Vous trouverez la réponse que vous souhaitez, inspiré du code d'Alan Graff, à l'aide du code source Turbo Basic suivant :
- DEF FNMoonPhase(Year,Month,Day)
- IF Month<=2 THEN DECR Year:INCR Month,12
- DECR Month,3
- XYear=Year MOD 100
- Century=INT((INT(Year / 100)*146097) / 4)
- XYear=INT((XYear*1461) / 4)
- M=(INT(((((Month*153)+2)/ 5)+Day)+1721119+XYear+Century)+4.867)/29.53058
- FNMoonPhase=ABS(2*(M-INT(M))-1)
- END DEF
-
- FOR I=1 TO 31
- CircleType=FNMoonPhase(1999,11,I)
- IF CircleType>0.97 THEN
- PRINT STR$(I)+" novembre 1999, Phase de la lune:Pleine lune"
- ELSEIF CircleType<0.03 THEN
- PRINT STR$(I)+" novembre 1999, Phase de la lune:Pas de lune"
- ELSEIF(CircleType>0.46)AND(CircleType<0.53)THEN
- PRINT STR$(I)+" novembre 1999, Phase de la lune: Quart de lune"
- END IF
- NEXT
- FOR I=1 TO 31
- CircleType=FNMoonPhase(2007,8,I)
- IF CircleType>0.97 THEN
- PRINT STR$(I)+" août 2007, Phase de la lune:Pleine lune"
- ELSEIF CircleType<0.03 THEN
- PRINT STR$(I)+" août 2007, Phase de la lune:Pas de lune"
- ELSEIF(CircleType>0.46)AND(CircleType<0.53)THEN
- PRINT STR$(I)+" août 2007, Phase de la lune: Quart de lune"
- END IF
- NEXT
on obtiendra le résultat suivant :
1 novembre 1999, Phase de la lune: Quart de lune8 novembre 1999, Phase de la lune:Pas de lune
15 novembre 1999, Phase de la lune: Quart de lune
23 novembre 1999, Phase de la lune:Pleine lune
30 novembre 1999, Phase de la lune: Quart de lune
6 août 2007, Phase de la lune: Quart de lune
13 août 2007, Phase de la lune:Pas de lune
20 août 2007, Phase de la lune: Quart de lune
28 août 2007, Phase de la lune:Pleine lune
Dernière mise à jour : Mardi, le 28 juillet 2015