JavaScript Lunar Phases Script

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>

</head>


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>

If you care to add images, we've got a zip file of lunar images that you can use with this script. Goto http://codeofisis.com/moon/lunar.zip to get this set of images. Unzip these and paste them into your /images directory. The complete URL for the images should be http://somesitename.com/images/lunar for your lunar images. Next - Place the following JavaScript someplace in your site for displaying the image files:

<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