A JavaScript-driven Lunar Phase Script
This script was found at http://www.rahoorkhuit.net/programming/java/wisdom/astrology.html
Our script here at Code of Isis and IAmAWitch.Com is similar in many regards, save for the fact that we integrated lunar images to match the age of the moon to similarly named images of the moon. We will provide a downloadable script of this in future lessons, but for now, we recommend you use this script and modify it for the vagaries of your site.
Note: We made a minor correction to the script. Waxing and Waning Gibbous phases were mistakenly reversed and our fix was a simple text edit to repair this minor oversight. We also repaired a bad year computation that was displaying the year as "106" instead of 2006. Again, another simple fix and quickly repaired.
Other than this, we present this lunar phase script "as-is".
within the head section of your HTML page place the following code:
<SCRIPT LANGUAGE="JavaScript">
<!--
function getMoonAge(year, month, day)
{
d = Math.floor(year/20)
r = year-(d*20) //r is the remainder of (year/20)
while (r>9)
{
r = r-19
}
r = r*11
while (r>29)
{
r = r-30
}
if (month<3)
{
month = month+2
}
r = r+month+day
if (year<100)
{
r = r-4
}
else
{
r = r-8.3
}
while(r>29)
{
r = r-30
}
while(r<0)
{
r = r+30
}
return r
}
function getMoonPhase(moonAge)
{
if (moonAge<1) return "New"
if (moonAge<6) return "Waxing Cresent"
if (moonAge<9) return "First Quarter"
if (moonAge<13) return "Waxing Gibbous"
if (moonAge<16) return "Full"
if (moonAge<20) return "Waning Gibbous"
if (moonAge<23) return "Last Quarter"
if (moonAge<25) return "Waning Cresent"
if (moonAge<29) return "Waning Cresent"
if (moonAge<1) return "New"
}
function getMoonPhaseImg(moonAge)
{
if (moonAge<1) return "New"
if (moonAge<5) return "Waxing_Cresent"
if (moonAge<9) return "First_Quarter"
if (moonAge<13) return "Waxing_Gibbous"
if (moonAge<16) return "Full"
if (moonAge<20) return "Waning_Gibbous"
if (moonAge<22) return "Last_Quarter"
if (moonAge<25) return "Waning_Cresent"
if (moonAge<29) return "Waning_Cresent"
if (moonAge<30) return "New"
}
monthNames = new Array(13)
monthNames[1] = "Jan"
monthNames[2] = "Feb"
monthNames[3] = "March"
monthNames[4] = "April"
monthNames[5] = "May"
monthNames[6] = "June"
monthNames[7] = "July"
monthNames[8] = "August"
monthNames[9] = "Sept"
monthNames[10] = "Oct"
monthNames[11] = "Nov"
monthNames[12] = "Dec"
dayNames = new Array(8)
dayNames[1] = "Sunday"
dayNames[2] = "Monday"
dayNames[3] = "Tuesday"
dayNames[4] = "Wednesday"
dayNames[5] = "Thursday"
dayNames[6] = "Friday"
dayNames[7] = "Saturday"
function getLongDate(dateObj)
{
theDay = dayNames[dateObj.getDay()+1]
theMonth = monthNames[dateObj.getMonth()+1]
theDate = dateObj.getDate()
return ""+theDay+", "+theMonth+" "+theDate
}
function getNextFull(moonAge)
{
currMilSecs = (new Date()).getTime()
daysToGo = 15 - moonAge
while(daysToGo<2)
{
daysToGo = daysToGo+29
}
milSecsToGo = daysToGo*24*60*60*1000
nextMoonTime = currMilSecs+milSecsToGo
nextMoonDate = new Date(nextMoonTime)
return nextMoonDate
}
function getNextNew(moonAge)
{
currMilSecs = (new Date()).getTime()
daysToGo = 29 - moonAge
while(daysToGo<2)
{
daysToGo = daysToGo+29
}
milSecsToGo = daysToGo*24*60*60*1000
nextMoonTime = currMilSecs+milSecsToGo
nextMoonDate = new Date(nextMoonTime)
return nextMoonDate
}
//-->
</SCRIPT>
and within the body type
<script LANGUAGE="JavaScript">
<!--
theDate = new Date()
theYear = theDate.getYear()
theMonth = theDate.getMonth()+1
theDay = theDate.getDate()
theMoonAge = getMoonAge(theYear, theMonth, theDay)
theMoonPhase = getMoonPhase(theMoonAge)
document.write("<font face=Helvetica,Arial size=1 color=#000000>Today is "+getLongDate(theDate)+".<BR>")
document.write("The moon is <br>"+theMoonPhase+".<BR>")
document.write("The current lunar month is "+theMoonAge)
if (theMoonAge==1)
{
document.write(" day old.<BR>")
}
else
{
document.write(" days old.<BR>")
}
document.write("Next <B>new</B> moon: ")
document.write(""+getLongDate( getNextNew(theMoonAge) )+".<BR>")
document.write("Next <B>full</B> moon: ")
document.write(""+getLongDate(getNextFull(theMoonAge))+".<BR>")
document.write("<BR CLEAR=ALL>")
//-->
</script>
<script language='javascript'>
//<--
theDate = new Date();
theYear = theDate.getYear();
theMonth = theDate.getMonth()+1;theDay = theDate.getDate();
theMoonAge = getMoonAge(theYear, theMonth, theDay);
theMoonPhase = getMoonPhase(theMoonAge);
theMoonPhase = getMoonPhaseImg(theMoonAge);
theNextFullMoon = getNextFull(theMoonAge);
theNextNewMoon = getNextNew(theMoonAge);
document.write('<div align=center><img src=/images/lunar/age_'+escape(Math.round(theMoonAge))+'d.gif>');
document.write('The moon is <strong>'+theMoonPhase+'<br>');
document.write('Next <strong>full moon: ');
document.write(getLongDate( getNextFull(theMoonAge)));
document.write('<br>');
document.write('Next new moon: ');
document.write(getLongDate( getNextNew(theMoonAge) )+' ');
document.write('<br>');
//-->
</script>
Change the displayed information as needed for your tastes. Enjoy!
CodeOfIsis.Com
http://codeofisis.iamawitch.net/site/staticpages/index.php?page=20060121162043961