Current moon phase
🌕
<html>
<head>
<title>Moon phase calculator... in Prolog!</title>
<style>body { background-color: black; color: #ffb000; font-family: monospace; padding: 5px; }</style>
</head>
<body>
<?
julian(Year, Month, Day, JulianDay) :-
( Month < 3 -> M = 12 ; M = Month ),
JulianDay is (1461 * (Year + 4800 + (M - 14)/12))/4 + (367 * (M - 2 - 12 * ((M - 14)/12)))/12 - (3 * ((Year + 4900 + (M - 14)/12)/100))/4 + Day - 32075.
moon_phase(Normal) :-
date_time(Y, M, D, _, _, _),
julian(Y, M, D, JD),
Moons is (JD - 2451549.5) / 29.53,
Normal is Moons - floor(Moons).
emoji(X, 🌑) :- X < 0.125.
emoji(X, 🌒) :- X >= 0.125, X < 0.25.
emoji(X, 🌓) :- X >= 0.25, X < 0.375.
emoji(X, 🌔) :- X >= 0.375, X < 0.5.
emoji(X, 🌕) :- X >= 0.5, X < 0.625.
emoji(X, 🌖) :- X >= 0.625, X < 0.75.
emoji(X, 🌗) :- X >= 0.75, X < 0.875.
emoji(X, 🌘) :- X >= 0.875.
?>
<main>
<h2>Current moon phase</h2>
<div style="font-size: 72pt;">
<?=Emoji moon_phase(X), emoji(X, Emoji). ?>
</div>
</main>
<hr>
<section>
<h2>Source Code</h2>
<pre><?=Source current_file(File), read_file_to_string(File, Source, []). ?></pre>
</section>
</body>
</html>