Skip to content

Instantly share code, notes, and snippets.

@Dither
Created September 17, 2016 10:07
Show Gist options
  • Save Dither/d2801f7b22d5602fff38821c2177e301 to your computer and use it in GitHub Desktop.
Save Dither/d2801f7b22d5602fff38821c2177e301 to your computer and use it in GitHub Desktop.
JS function to calculate moon phase
function moon_phase(date) { // ported from http://www.voidware.com/moon_phase.htm
var year = date.getYear(),
month = date.getMonth(),
day = date.getDay();
if (month < 3) {
year--;
month += 12;
}
++month;
jd = 365.25 * year + 30.6 * month + day - 694039.09; // jd is total days elapsed
jd /= 29.53; // divide by the moon cycle (29.53 days)
phase = parseInt(jd, 10); // int(jd) -> phase, take integer part of jd
jd -= phase; // subtract integer part to leave fractional part of original jd
phase = Math.ceil(jd * 8); // scale fraction from 0-8 and round by adding 0.5
phase = phase & 7; // 0 and 8 are the same so turn 8 into 0
switch (phase) {
case 0: phase = "New Moon"; break;
case 1: phase = "Waxing Crescent Moon"; break;
case 2: phase = "Quarter Moon"; break;
case 3: phase = "Waxing Gibbous Moon"; break;
case 4: phase = "Full Moon"; break;
case 5: phase = "Waning Gibbous Moon"; break;
case 6: phase = "Last Quarter Moon";
case 7: phase = "Waning Crescent Moon"; break;
}
return phase;
}
//document.write(moon_phase(new Date(Date.now())))
@wordbugs
Copy link

wordbugs commented May 9, 2023

There should be a break after the sixth case; this will never return 'Last Quarter Moon'.

Copy link

ghost commented Sep 8, 2023

Doesn't work for me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment