Home Shark Introduction Shark Reference Guide Contact/Purchase Menu ☰

DATE FORMATS

1. Date Input Formats
2. Date Output Formats
3. DATE( Function
4. DAYS( Function
5. MONTHS( Function

DATE INPUT FORMATS:

These are the valid formats for date strings used with the DATE(, DAYS(, and MONTHS( functions:

          FORMAT        EXAMPLE (09/17/91):
          mmddyy           091791
          ddmmyy           170991
          yymmdd           910917
          mmddyyyy         09171991
          ddmmyyyy         17091991
          yyyymmdd         19910917

Optionally, use a hyphen, slash or space to separate elements of the date input string (e.g., 07-04-91, 12/25/91, 03 11 91). If a date string entered for the DATE() function is ambiguous (e.g., the string "110391" could be March 11 or November 3), Shark reads the string according to the format set by the SET DATE command.

Date INPUTS are prone to errors, so it's better to firmly format all date inputs using @...SAY...GET...READ constructs.

DATE OUTPUT FORMATS:

These are the output format numbers for use with the DATE() function.

Number Name      Display
   ⊙
   1    YMD       yymmdd (6 characters: 990601)
   2    MDY       mm/dd/yy (8 characters: 06/01/99)
   3    CHAR      Month name, day, year (variable length: June 1, 1999)
   4    FULL      day of week, month name, day, year (variable length:
                  Sunday, June 1, 1999)
   5    Lchar     Last day of month (variable length: June 30, 1999)
   6    DMY       dd-mmm-yyyy (11 characters: 01-JUN-1999)
   7    VARIABLE  Format determined by the SET DATE command (variable length)
   8    LONG      yyyymmdd
   9    LAST      yymmdd or yyyymmdd, depending on format specified with
                  SET DATE

Date information can be further enhanced by using the PICTURE format.

Example:

1>? date(8) ; i.e. LONG ISO-8601 date format
20031205
1>? date(8) pic("XXXX.XX.XX)
2003.12.05


DATE( Function:

Displays a date in a specific format, or update :DATE with the computer's system date.


DATE(type[,str exp]

type = one of 9 type basic date-output formats, e.g. "8"

Option: str exp = the date to be converted, e.g. "08-23-19"

Type: character

This function has three distinctly different purposes and results:

1. with only type specified in the range 1-9, rewrites the current Shark date in :DATE in the format specified by the type, and returns the result.

2. with two parameters (the format in the range 1-9, and the date) returns the given date in the specified format. :DATE is not effected.

3. with only type specified as zero, updates the Shark date with the computer's current system date, and the computer time with the current system time. The Shark and system dates are always the same when Shark is started, but the Shark does not automatically advance at midnight as the computer's system date should. When Shark can be in use overnight, or even for days at a time, it may be important to ensure that these dates are kept in synchronization. Returns a string of length zero.

The type can be given in either of two forms, a name or number (numeric expression) as follows:

Type            Date-output format
-------------   -----------------------------------------------------------
0               a string of length zero
1 or YMD        6-character format without slashes: yymmdd
2 or MDY        8-character format with slashes: mm/dd/yy
3 or Char       Spelled out: Month dd, yyyy
4 or Full       Spelled out: Weekday, Month dd, yyyy; valid only for years 1980-2079
5 or Lchar      Last day of month spelled out in format 3 (Char)
6 or DMY        11-byte string in format dd-MMM-yyyy (example 03-NOV-1990)
7 or Variable   formatted without slashes according to SET DATE TO command (See SET DATE TO)
8 or Long       ISO-8601 standard 8-character format without slashes: yyyymmdd
9 or Last       Last day of month in format 1 (YMD) or 8 (Long), depending on whether SET 
                DATE TO command set year to YY or YYYY

Shortcut: When specifying type by name, only the first character is usually required. The exception is for Lchar, Long, and Last, which require two characters to resolve ambiguity. If only one is given, Lchar is assumed.

Note: No name equivalent is provided for type 0, which updates the Shark date from the computer's calendar setting.

str exp must contain the date in one of the following formats:

mmddyy      ddmmyy       yymmdd   mmddyyyy   ddmmyyyy   yyyymmdd

Optionally, a slash, a hyphen, or a space may be used to separate the elements of these formats. For example, YY/MM/DD, YY-MM-DD, DD MM YYYY are all equally valid.

There should be two digits each for month and the day, and two or four digits for the year. 01 3 92 is not acceptable. If str exp is not acceptable, then DATE( returns a string of blanks.

In the event of ambiguity, dates will be decoded in accordance with the format set in the SET DATE TO command. For example:

SET DATE TO    date           is interpreted as  
-------------  -------------  ------------------  
'ddmyy'        11/03/99       March 11, 1999
'mmddyy'       11/03/21       November 3, 2021
'mmddyy'       11/03/60       November 3, 2060    

See also the system variable :DATE and the command SET DATE TO.

Examples:

1>:DATE= '10/05/99'
1>? :DATE
10/05/99
1>? DATE()
19991005
1>? :DATE
19991005
1>? DATE(1)
991005
1>? :DATE
991005
1>? DATE(2)
10/05/99
1>? :DATE
10/05/99
1>? DATE(3)
October 5, 1990
1>? :DATE
October 5, 1990
1>? DATE(4)
Saturday, October 5, 1990
1>? :DATE
Saturday, October 5, 1990
1>? DATE(4,'12/08/90')
Sunday, December 8, 1990
1>? :DATE
Saturday, October 5, 1990
1>? DATE(5,'90-30-27')
March 31, 1990
1>? DATE(6,'03  27 90')
27-Mar-1990
1>1>? date(8,'03-18-10')
2010-Mar-18 <-- ISO-8601 standard sequence
1>? :DATE
Saturday, October 5, 1990

If the time has passed midnight during the current run of Shark, you can update the Shark date with DATE(0):

1>? DATE(0)
1>? DATE(4)
Sunday, October 6, 1990

A preferred date format such as ISO-8601 standard can be stored in Shark's .CNF file as a system variable. It's then visible to all applications in Shark:

:UNDOC=PIC(DATE(8),"XXXX.XX.XX")

Calling :UNDOC will show today's formatted date, properly sequenced according to the ISO-8601 standard. This is useful for screen displays, menus, etc. For date-dependent data such as transactions, invoices, etc, use the unformatted date(8). This is the most useful format for aging data since your data file can be directly indexed by date.

DAYS( Function:

Computes dates and date differences in days.

DAYS(<str exp1>,<str exp2>)
DAYS(<str exp>,<num exp>)

NOTE: In the first form, str exp1 and str exp2 are dates. In the second form, str exp is a date and num exp is a number

Type: numeric/character

In the first form, DAYS( returns the number of days between two dates. The result is an integer.

In the second form, DAYS( returns the date (as a string) which is num exp days past or before the date str exp.

The string expressions containing dates can be of many different formats (see the DATE( function for more examples):

               yy/mm/dd    yy-mm-dd    yyyy mm dd
               mm/dd/yy    mm-dd-yy    mm dd yy

There should be two digits each for yy, mm, and dd, and four digits for yyyy. 01 3 90 is not acceptable.

In the second form, the date is returned in the format set with the SET DATE TO command (default: mmddyyyy). If you wish a different format, use the DATE( function. See also MONTHS( and SET DATE TO.

Examples:

1>? DAYS('04 06 90','04 29 90')
     23.00
1>? DAYS('01/01/88','01 23 90')
    753.00
1>? DAYS('01/01/90','01 23 88')
   -708.00
1>? DAYS('01/01/91','01 02 91')
      1.00
1>? DAYS('01/02/91','01 01 91')
     -1.00
1>? DAYS('02/28/88','03 01 88')    ;leap year
      2.00
1>? DAYS('02/28/90','03 01 90')    ;not a leap year
      1.00
1>? DAYS('04 03 90',30)
050290
1>? DAYS('02 03 90',30)
030590
1>? DAYS('02 03 90',-3)
010490
1>? DAYS('020390',-30)
010490
1>monthday='0203'
1>offset=30
1>? DAYS(monthday+'90',offset+1)
030690

DAYS( and DATE( may be combined to form complex expressions. For instance, the end of the month closest to today in the form set in the SET DATE TO command:

DATE(7,DAYS(DATE(2),-15))

The end of NEXT month:

DATE(5,DAYS(DATE(2),30))

See DATE( and MONTHS( functions, and SET DATE TO command.

MONTHS( Function:

Computes date differences in months.

MONTHS(/num exp)

<date1>      a string expression containing a valid date

Options:

 <date2> a string expression containing a valid date; when <date2> is specified, MONTHS( returns number of
              months between the two dates num exp number of months before or after date1; when specified, MONTHS( returns date that many months away
			  
 Type: character/numeric

MONTHS( computes the difference between the two dates in months, or computes a date a given number of months before or after a specified date. Fractional parts of months are discarded.

If a computed date is after the last date of the month, the date will be adjusted to the last day of the month. For example, MONTHS('013190',1) results in 022890.

Examples:

1>? MONTHS('04 06 90','04 29 90')
      0.00
1>? MONTHS('01/01/90','02/01/90')
      1.00
1>? MONTHS('02/01/90','01/01/90')
     -1.00
1>? MONTHS('01/01/90','01/01/92')
     24.00
1>? MONTHS('02/01/90',10)
120190
1>? MONTHS('01/01/90',-6)
070189