Contributor: ALAN GRAFF { As Robert Forbes said to All on 25 Apr 94... RF> Anyone have any idea how to make an algorithm to RF> calculate the moonphase given the date? Here ya go: TYPE DATETYPE = record day:WORD; MONTH:WORD; YEAR:WORD; dow:word; end; {=================================================================} Procedure GregorianToJulianDN(Year, Month, Day:Integer; var JulianDN :LongInt); var Century, XYear : LongInt; begin {GregorianToJulianDN} If Month <= 2 then begin Year := pred(Year); Month := Month + 12; end; Month := Month - 3; Century := Year div 100; XYear := Year mod 100; Century := (Century * D1) shr 2; XYear := (XYear * D0) shr 2; JulianDN := ((((Month * 153) + 2) div 5) + Day) + D2 + XYear + Century; end; {GregorianToJulianDN} {=================================================================} Function MoonPhase(Date:Datetype):Real; (***************************************************************) (* *) (* Determines APPROXIMATE phase of the moon (percentage lit) *) (* 0.00 = New moon, 1.00 = Full moon *) (* Due to rounding, full values may possibly never be reached *) (* Valid from Oct. 15, 1582 to Feb. 28, 4000 *) (* Calculations and BASIC program found in *) (* "119 Practical Programs For The TRS-80 Pocket Computer" by *) (* John Clark Craig, TAB Books, 1982 *) (* Conversion to Turbo Pascal by Alan Graff, Wheelersburg, OH *) (* *) (***************************************************************) var j:longint; m:real; Begin GregorianToJulianDN(Date.Year,Date.Month,Date.Day,J); M:=(J+4.867)/ 29.53058; M:=2*(M-Int(m))-1; MoonPhase:=Abs(M); end;