/*
 * $Id: datetime.txt,v 1.4 2000/04/25 06:27:22 brianhays Exp $
 */


/*
 * The following parts are Copyright of the individual authors.
 * www - http://www.harbour-project.org
 *
 * Copyright 2000 Luiz Rafael Culik <culik@sl.conex.net>
 *    Documentation for: CDOW(),CMONTH(),DATE(),CTOD(),DAY(),DAYS()
 *    DOW(),DTOS(),DTOC(),ELAPTIME(),MONTH(),SECONDS(),SECS(),TIME(),YEAR()
 * See doc/license.txt for licensing terms.
 *
 */

/*  $DOC$
 *  $FUNCNAME$
 *      CDOW()
 *  $CATEGORY$
 *      Date
 *  $ONELINER$
 *      Converts a date to the day of week
 *  $SYNTAX$
 *      CDOW(<dDate>)  --> cDay
 *  $ARGUMENTS$
 *      <dDate>  Any date expression.
 *  $RETURNS$
 *      <cDay>  The current day of week.
 *  $DESCRIPTION$
 *      This function returns a character string of the day of the week,
 *      from a date expression <dDate> passed to it.
 *      If a NULL date is passed to the function, the value of the function
 *      will be a NULL byte.
 *  $EXAMPLES$
 *      ? CDOW(DATE())
 *      if CDOW(DATE()+10) =="SUNDAY"
 *         ? "This is a sunny day."
 *      Endif
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant.
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      DAY(),DOW(),DATE(),CMONTH()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      CMONTH()
 *  $CATEGORY$
 *      Date
 *  $ONELINER$
 *      Return the name of the month.
 *  $SYNTAX$
 *      CMONTH(<dDate>)  --> cMonth
 *  $ARGUMENTS$
 *      <dDate>  Any date expression.
 *  $RETURNS$
 *      <cMonth>  The current month name
 *  $DESCRIPTION$
 *      This function returns the name of the month (January,February,etc.)
 *      from a date expression <dDate> passed to it.
 *      If a NULL date is passed to the function, the value of the function
 *      will be a NULL byte.
 *  $EXAMPLES$
 *      ? CMONTH(DATE())
 *      if CMONTH(DATE()+10) =="March"
 *         ? "Have you done your system BACKUP?"
 *      Endif
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      CDOW(),DATE(),MONTH(),YEAR(),DOW(),DTOC()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      DATE()
 *  $CATEGORY$
 *      Date
 *  $ONELINER$
 *      Return the Current OS Date
 *  $SYNTAX$
 *      DATE() --> dCurDate
 *  $ARGUMENTS$
 *      None
 *  $RETURNS$
 *      <dCurDate>  Current system date.
 *  $DESCRIPTION$
 *      This function returns the current system date.
 *  $EXAMPLES$
 *      ? Date()
 *  $TESTS$
 *      ? "Today is ",Day(date())," of ",cMonth(date())," of ",Year(date())
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper Compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      CTOD(),DTOS(),DTOC(),DAY(),MONTH(),CMONTH()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      CTOD()
 *  $CATEGORY$
 *      Date
 *  $ONELINER$
 *      Converts a character string to a date expression
 *  $SYNTAX$
 *      CTOD(<cDateString>)  --> dDate
 *  $ARGUMENTS$
 *      <cDateString> A character date in format 'mm/dd/yy'
 *  $RETURNS$
 *      <dDate> A date expression
 *  $DESCRIPTION$
 *      This function converts a date that has been entered as a character
 *      expression to a date expression.The character expression will be in
 *      the form "MM/DD/YY" (based on the default value in SET DATE) or in
 *      the appropriate format specified by the SET DATE TO command. If an
 *      improper character string is passed to the function,an empty date
 *      value will be returned.
 *  $EXAMPLES$
 *      ? CTOD('12/21/00')
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      SET DATE,DATE(),DTOS()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      DAY()
 *  $CATEGORY$
 *      Date
 *  $ONELINER$
 *      Return the numeric day of the month.
 *  $SYNTAX$
 *      DAY(<cDate>) --> nMonth
 *  $ARGUMENTS$
 *      <cDate> Any valid date expression.
 *  $RETURNS$
 *     <nMonth> Numeric value of the day of month.
 *  $DESCRIPTION$
 *      This function returns the numeric value of the day of month from a
 *      date.
 *  $EXAMPLES$
 *      ? Day(DATE())
 *      ? Day(DATE()+6325)
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      CTOD(),DTOS(),DTOC(),DATE(),MONTH(),CMONTH()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      DAYS()
 *  $CATEGORY$
 *      Date
 *  $ONELINER$
 *      Convert elapsed seconds into days
 *  $SYNTAX$
 *      DAYS(<nSecs> ) --> nDay
 *  $ARGUMENTS$
 *      <nSecs> The number of seconds
 *  $RETURNS$
 *      <nDay>  The number of days
 *  $DESCRIPTION$
 *      This function converts <nSecs> seconds to the equivalent number
 *      of days; 86399 seconds represents one day, 0 seconds being midnight.
 *  $EXAMPLES$
 *      ? DAYS(2434234)
 *      ? "Has been passed ",DAYS(63251),' since midnight'
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      SECONDS(),SECS(),ELAPTIME()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      DOW()
 *  $CATEGORY$
 *      Date
 *  $ONELINER$
 *      Value for the day of week.
 *  $SYNTAX$
 *      DOW(<dDate>) --> nDay
 *  $ARGUMENTS$
 *      <dDate>  Any valid date expression
 *  $RETURNS$
 *      <nDay>  The current day number
 *  $DESCRIPTION$
 *      This function returns the number representing the day of the week
 *      for the date expressed as <dDate>.
 *  $EXAMPLES$
 *      ? DOW(DATE())
 *      ? DOW(DATE()-6584)
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      DTOC(),CDOW(),DATE(),DTOS(),DAY()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      DTOC()
 *  $CATEGORY$
 *      Date
 *  $ONELINER$
 *      Date to character conversion
 *  $SYNTAX$
 *      DTOC(<dDateString>)  --> cDate
 *  $ARGUMENTS$
 *      <dDateString> Any date
 *  $RETURNS$
 *      <dDate> Character represention of date
 *  $DESCRIPTION$
 *      This function converts any date expression (a field or variable)
 *      expressed as <dDateString> to a character expression in the default
 *      format "MM/DD/YY". The date format expressed by this function is
 *      controled in part by the date format specified in the SET DATE
 *      command
 *  $EXAMPLES$
 *      ? DTOC(Date())
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      SET DATE,DATE(),DTOS()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      DTOS()
 *  $CATEGORY$
 *      Date
 *  $ONELINER$
 *      Date to string conversion
 *  $SYNTAX$
 *      DTOS(<dDateString>)  --> cDate
 *  $ARGUMENTS$
 *      <dDateString> Any date
 *  $RETURNS$
 *      <dDate> String notation of the date
 *  $DESCRIPTION$
 *      This function returns the value of <dDateString> as a character
 *      string in the format of YYYYMMDD. If the value of <dDateString> is
 *      an empty date, this function will return eight blank spaces.
 *  $EXAMPLES$
 *      ? DTOS(Date())
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      DTOC(),DATE(),DTOS()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      ELAPTIME()
 *  $CATEGORY$
 *      Time
 *  $ONELINER$
 *      Calculates elapted time.
 *  $SYNTAX$
 *      ELAPTIME(<cStartTime>,<cEndTime>) --> cDiference
 *  $ARGUMENTS$
 *      <cStartTime> Start in time as a string format
 *      <cEndTime>   End time as a string format
 *  $RETURNS$
 *      <cDiference>  Difference between the times
 *  $DESCRIPTION$
 *      This function returns a string that shows the difference between
 *      the starting time represented as <cStartTime> and the ending time
 *      as <cEndTime>. If the stating time is greater then the ending
 *      time, the function will assume that the date changed once.
 *  $EXAMPLES$
 *      Static cStartTime
 *      Init Proc Startup
 *      cStartTime:=Time()
 *
 *      Exit Proc StartExit
 *      ? "You used this program by",ELAPTIME(cStartTime,Time())
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      SECS(),SECONDS(),TIME(),DAY()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      MONTH()
 *  $CATEGORY$
 *      Date
 *  $ONELINER$
 *      Converts a date expression to a month value
 *  $SYNTAX$
 *      MONTH(<dDate>) --> nMonth
 *  $ARGUMENTS$
 *      <dDate> Any valid date expression
 *  $RETURNS$
 *     <nMonth> Corresponding number of the month in the year, ranging from
 *      0 to 12
 *  $DESCRIPTION$
 *      This function returns a number that represents the month of a given
 *      date expression <dDate>. If a NULL date (CTOD('')) is passed to the
 *      function, the value of the function will be 0.
 *  $EXAMPLES$
 *      ? Month(DATE())
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      CDOW(),DOW(),YEAR(),CMONTH()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      SECONDS()
 *  $CATEGORY$
 *      Time
 *  $ONELINER$
 *      Returns the number of elapsed seconds past midnight.
 *  $SYNTAX$
 *      SECONDS() --> nSeconds
 *  $ARGUMENTS$
 *      None
 *  $RETURNS$
 *      <nSeconds> Number of seconds since midnight
 *  $DESCRIPTION$
 *      This function returns a numeric value representing the number of
 *      elapsed seconds based on the current system time.
 *      The system time is considered to start at 0 (midnight);it continues
 *      up to 86399 seconds.The value of the return expression is displayed
 *      in both seconds and hundredths of seconds.
 *  $EXAMPLES$
 *      ? Seconds()
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      TIME()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      SECS()
 *  $CATEGORY$
 *      Time
 *  $ONELINER$
 *      Return the number of seconds from the system date.
 *  $SYNTAX$
 *      SECS( <cTime> ) --> nSeconds
 *  $ARGUMENTS$
 *      <cTime> Character expression in a time string format
 *  $RETURNS$
 *      <nSeconds> Number of seconds
 *  $DESCRIPTION$
 *      This function returns a numeric value that is a number of elapsed
 *      seconds from midnight based on a time string given as <cTime>.
 *  $EXAMPLES$
 *      ? Secs(Time())
 *      ? Secs(time()-10)
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      SECONDS(),ELAPTIME(),TIME()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      TIME()
 *  $CATEGORY$
 *      Time
 *  $ONELINER$
 *      Returns the system time as a string
 *  $SYNTAX$
 *      TIME() --> cTime
 *  $ARGUMENTS$
 *      None
 *  $RETURNS$
 *      <cTime> Character string representing time
 *  $DESCRIPTION$
 *      This function returns the system time represented as a character
 *      expression in the format of HH:MM:SS
 *  $EXAMPLES$
 *      ? Time()
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      DATE(),SECONDS()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      YEAR()
 *  $CATEGORY$
 *      Date
 *  $ONELINER$
 *      Converts the year portion of a date into a numeric value
 *  $SYNTAX$
 *      YEAR(<cDate>) --> nYear
 *  $ARGUMENTS$
 *      <dDate> Any valid date expression
 *  $RETURNS$
 *      <nYear> The year portion of the date.
 *  $DESCRIPTION$
 *      This function returns the numeric value for the year in <dDate>.
 *      This value will always be a four-digit number and is not affected
 *      by the setting of the SET CENTURY and SET DATE commands. Addition
 *      ally, an empty date expression passed to this function will yield
 *      a zero value.
 *
 *  $EXAMPLES$
 *      ? Year(date())
 *      ? year(CTOD("01/25/3251"))
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      This function is Ca-Clipper compliant
 *  $PLATFORMS$
 *      All
 *  $FILES$
 *      Library is rtl
 *  $SEEALSO$
 *      DAY(),MONTH()
 *  $END$
 */

