/* 
   Convert a date to Standard Julian Date format

   By Speedy Mercer
   
   Usage Syntax:
      DEF VAR vDate   AS DATE    INIT TODAY NO-UNDO. 
      DEF VAR vJulian AS INTEGER NO-UNDO.
      RUN ToJulianDate.p (INPUT vDate, OUTPUT vJulian).
      disp vJulian.
*/

DEF INPUT  PARAM vDate   AS DATE    NO-UNDO. 
DEF OUTPUT PARAM vJulian AS INTEGER NO-UNDO.

DEF VAR vYear    AS INTEGER NO-UNDO.
DEF VAR vCentury AS INTEGER NO-UNDO.
DEF VAR vDecade  AS INTEGER NO-UNDO.
DEF VAR vMonth   AS INTEGER NO-UNDO.
DEF VAR vDay     AS INTEGER NO-UNDO.

ASSIGN
   vYear    = year(vDate)              /* Get Year */
   vCentury = truncate(vYear / 100,0)  /* Get Century */
   vDecade  = vYear - (vCentury * 100) /* Get Decade */
   vMonth   = month(vDate)             /* Get Month */
   vDay     = day(vDate).              /* Get Day */

IF vMonth > 2 
THEN vMonth = vMonth - 3.
ELSE ASSIGN 
   vMonth = vMonth + 9
   vYear  = vYear - 1.

ASSIGN vJulian = TRUNCATE((146097 * vCentury) / 4 + (1461 * vDecade) / 4 + (153 * vMonth + 2) / 5 + vDay + 1721119,0).
