Go to:  Davar site entry | Site contents | Site index | Personal Computer | PowerBASIC | Text bottom

GRE2DAY&  PowerBASIC  Function

         

GRE2DAY& function evaluates to the absolute day number that corresponds to the Gregorian date specified as its parameter.  Date should be specified in one of the formats MM-DD-YY or MM-DD-CCYY and should be a valid date in Gregorian calendar.  If parameter doesn't represent a valid date, 0 (zero) is returned instead of absolute day number.  If century is omitted, the current century is assumed.  Date field delimiters are expected to be in the fixed positions 3 and 5; values of delimiters are insignificant.  If parameter is empty, absolute day number is returned for the current date.

Note:  Program doesn't take into account pre-Gregorian (Julian) calendar differences and date adjustment made on 09/14/1752 when England and its colonies switched from Julian calendar to currently used Gregorian. Since GRE2DAY& function is intended for the modern-time date calculations, those factors are insignificant.

Direct dependency:

GRE2JUL$ Convert Gregorian date into Julian date format

Indirect dependencies:

DIGITAL% Check character string for digital value (predicate)
LEAP% Check year for leap value (predicate)
VALDGRE% Check date for valid Gregorian value (predicate)



 GRE2DAY&  Source  Program                     Debugging program             Debugging logout

      ' GRE2DAY&(0.0)  Convert Gregorian Date to Day Number  02/01/1989-10/15/2004
      ' --------------------------------------------------------------------------
      ' Copyright (C) 1989-2004 by Vladimir Veytsel                  www.davar.net

      ' Type ---------------------------------------------------------------------

      '    Function

      ' Description --------------------------------------------------------------

      '    GRE2DAY& function converts Gregorian date into absolute day number.

      ' Declaration --------------------------------------------------------------

      '    DECLARE FUNCTION GRE2DAY&(Greg.Date$)

      ' Parameter ----------------------------------------------------------------

      '    Greg.Date$  - Gregorian date in the form of MM-DD-YY or MM-DD-CCYY

      ' Value --------------------------------------------------------------------

      '    If specified Gregorian date is either EMPTY or valid, i.e.:
      '       it has length either of 8 or 10 characters and
      '       it is DIGITAL (with the exception of date field delimiters) and
      '       month value lies within 1-12 and
      '       day number lies within range valid for the specified month
      '       (considering specified year leap characteristic when
      '       evaluating day range for February),
      '       then absolute day number for specified Gregorian date is returned
      '            to the point of function invocation
      '       else 0 (zero) is returned to the point of invocation.

      ' Notes --------------------------------------------------------------------

      '  - Delimiters of parameter date fields are irrelevant and can be any
      '    symbols.  Date fields are extracted from fixed positions.

      '  - EMPTY date is considered to be a valid one, and absolute A.D. day
      '    number is returned for the CURRENT date (default).

      '  - Program doesn't take into account pre-Gregorian (Julian)calendar
      '    differences and date adjustment made on 09/14/1752 - when England
      '    and its colonies switched from Julian calendar to currently used
      '    Gregorian.  Since program is intended for the modern-time date
      '    calculations, those factors are insignificant.

      ' Examples -----------------------------------------------------------------

      '    GRE2DAY&("*"         )= 0
      '    GRE2DAY&(""          )= Absolute day number for the current date
      '    GRE2DAY&("01-01-0001")= 1
      '    GRE2DAY&("12-31-0001")= 365
      '    GRE2DAY&("01-01-0002")= 366
      '    GRE2DAY&("12-31-0002")= 730
      '    GRE2DAY&("01-01-0003")= 731
      '    GRE2DAY&("12-31-0003")= 1095
      '    GRE2DAY&("01-01-0004")= 1096
      '    GRE2DAY&("12-31-0004")= 1461
      '    GRE2DAY&("01-01-0005")= 1462
      '    GRE2DAY&("12-31-1986")= 725371
      '    GRE2DAY&("01-01-1987")= 725372
      '    GRE2DAY&("12-31-1987")= 725736
      '    GRE2DAY&("01-01-1988")= 725737
      '    GRE2DAY&("12-31-1899")= 693595
      '    GRE2DAY&("01-01-1900")= 693596
      '    GRE2DAY&("12-31-1999")= 730119
      '    GRE2DAY&("01-01-00"  )= 730120

      ' External Function --------------------------------------------------------

           DECLARE FUNCTION GRE2JUL$(Greg.Date$)

      ' Start Function -----------------------------------------------------------

           DEFINT A-Z  ' All defaulted variables are integer

           FUNCTION GRE2DAY&(Greg.Date$) PUBLIC

      ' Convert Gregorian Date to Julian Format ----------------------------------
      ' (Checks date validity and handles default empty date - current)

           Jul.Date$=GRE2JUL$(Greg.Date$)

           IF (LEN(Jul.Date$)=0) THEN
              GRE2DAY&=0
              EXIT FUNCTION
           END IF

      ' Add Current Century to Short Date (YY-DDD) -------------------------------

           IF (LEN(Jul.Date$)=6) THEN
              Jul.Date$=MID$(DATE$,7,2)+Jul.Date$
           END IF

      ' Parse Date to Be Converted -----------------------------------------------

           Day    =VAL(RIGHT$(Jul.Date$,3))
           Year   =VAL( LEFT$(Jul.Date$,4))-1  ' First day of A.D. is 01-01-0001
           Century=INT(Year/100)

      ' Compute and Return Absolute Day Number to the Point of Invocation --------

           GRE2DAY&=Year*365+Day+INT(Year/4)-Century+INT(Century/4)

      ' Finish.Function ----------------------------------------------------------

           END FUNCTION
  
         

 GRE2DAY&  Debugging  Program                   Source program             Debugging logout

      ' GRE2DAY&(0.0)  Convert Gregorian Date to Day Number  02/01/1989-10/15/2004
      ' --------------------------------------------------------------------------

        $INCLUDE "GRE2DAY"
        $LINK    "MODULE.PBL"

        DECLARE FUNCTION GRE2DAY&(Greg.Date$)

        CLS
        PRINT "GRE2DAY&(0.0)  Convert Gregorian Date to Absolute Day Number  ";DATE$;
        PRINT "  ";LEFT$(TIME$,5)
        PRINT STRING$(79,"-")
        PRINT

        PRINT "GRE2DAY&('*'         )="; _
               GRE2DAY&("*"         )
        PRINT "GRE2DAY&(''          )="; _
               GRE2DAY&(""          );"  - Today ";DATE$
        PRINT "GRE2DAY&('01-01-0001')="; _
               GRE2DAY&("01-01-0001")
        PRINT "GRE2DAY&('12-31-0001')="; _
               GRE2DAY&("12-31-0001")
        PRINT "GRE2DAY&('01-01-0002')="; _
               GRE2DAY&("01-01-0002")
        PRINT "GRE2DAY&('12-31-0002')="; _
               GRE2DAY&("12-31-0002")
        PRINT "GRE2DAY&('01-01-0003')="; _
               GRE2DAY&("01-01-0003")
        PRINT "GRE2DAY&('12-31-0003')="; _
               GRE2DAY&("12-31-0003")
        PRINT "GRE2DAY&('01-01-0004')="; _
               GRE2DAY&("01-01-0004")
        PRINT "GRE2DAY&('12-31-0004')="; _
               GRE2DAY&("12-31-0004")
        PRINT "GRE2DAY&('01-01-0005')="; _
               GRE2DAY&("01-01-0005")
        PRINT "GRE2DAY&('12-31-1986')="; _
               GRE2DAY&("12-31-1986")
        PRINT "GRE2DAY&('01-01-1987')="; _
               GRE2DAY&("01-01-1987")
        PRINT "GRE2DAY&('12-31-1987')="; _
               GRE2DAY&("12-31-1987")
        PRINT "GRE2DAY&('01-01-1988')="; _
               GRE2DAY&("01-01-1988")
        PRINT "GRE2DAY&('12-31-1899')="; _
               GRE2DAY&("12-31-1899")
        PRINT "GRE2DAY&('01-01-1900')="; _
               GRE2DAY&("01-01-1900")
        PRINT "GRE2DAY&('12-31-1999')="; _
               GRE2DAY&("12-31-1999")
        PRINT "GRE2DAY&('01-01-00'  )="; _
               GRE2DAY&("01-01-00"  );"  - Today's century"

        PRINT
        PRINT "Execution completed - hit [Enter] to continue..."
  
         

 GRE2DAY&  Debugging  Logout                         Source program                   Debugging program

         

   GRE2DAY&(0.0)  Convert Gregorian Date to Absolute Day Number  10-15-2004  08:38
   -------------------------------------------------------------------------------

   GRE2DAY&('*'         )= 0
   GRE2DAY&(''          )= 731869   - Today 10-15-2004
   GRE2DAY&('01-01-0001')= 1
   GRE2DAY&('12-31-0001')= 365
   GRE2DAY&('01-01-0002')= 366
   GRE2DAY&('12-31-0002')= 730
   GRE2DAY&('01-01-0003')= 731
   GRE2DAY&('12-31-0003')= 1095
   GRE2DAY&('01-01-0004')= 1096
   GRE2DAY&('12-31-0004')= 1461
   GRE2DAY&('01-01-0005')= 1462
   GRE2DAY&('12-31-1986')= 725371
   GRE2DAY&('01-01-1987')= 725372
   GRE2DAY&('12-31-1987')= 725736
   GRE2DAY&('01-01-1988')= 725737
   GRE2DAY&('12-31-1899')= 693595
   GRE2DAY&('01-01-1900')= 693596
   GRE2DAY&('12-31-1999')= 730119
   GRE2DAY&('01-01-00'  )= 730120   - Today's century

   Execution completed - hit [Enter] to continue...
        
      

         

View [and save] GRE2DAY.BAS text       View [and save] ZGRE2DAY.BAS text
(Use [Back] button or [Alt]+[CL] to return here from the viewed text)
Copyright © 19882004 by
Go to:  Davar site entry | Site contents | Site index | Personal Computer | PowerBASIC | Text top