× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



On 10-Aug-2016 10:23 -0500, CRPence wrote:
On 09-Aug-2016 14:08 -0500, Stone, Joel wrote:
In COBOL, what is a good method of comparing a data field date to
the current date?

It seems that ALL data fields must be declared to appear with a
separator character.

And it seems that the CURRENT-DATE function cannot return a date
separator.

Is it mandatory to break apart the current date, and string it back
together with a separator?

Surely there must be an easier way to write something like:

If Cust-add-date = ws-curr-date

where Cust-add-date is type "L" format *MDY

without breaking apart and rebuilding the current date?

Is use of the Conversion Options (CVTOPT) *DATE directive on the
compile [e.g. on a Create Bound COBOL Program (CRTBNDCBL)] to tell
the compiler that the /field/ "date data types are declared as
category *date* COBOL data-items" sufficient? That text for the *DATE
directive would seem to imply that the field having been data-typed
as *date*, that comparisons with the fields should be done for the
value of the date rather than with the value of the formatted
character-string that would be used for presentation <<SNIP>>

Testing with that *DATE specification on the CVTOPT parameter confirms that a relative comparison between the DATFMT(*MDY) field and a variable [with the current-date assigned] performed as expected; the difference from the OP being, that the variable used as an operand in the predicate must be declared as a *date* typed data-item, according to the FORMAT clause specified on the declarative.

So the expressed concern about "breaking apart and rebuilding the current date" being an additional requirement seems a tad hyperbolic, given all that is required to effect the /break+rebuild/, is to /move/ the current-date data [as non-separated digits in a YYYYMMDD format] from the ws-curr-date variable into an actual date-type data-item using the CONVERT-DATE-TIME intrinsic function; that need be done just once, and probably done in the initialization phase of the program:
.
01 WS-CURR-DATE PIC 9(8).
01 MY-ISO-START-DATE FORMAT DATE '@Y-%m-%d'.


ACCEPT WS-CURR-DATE FROM DATE YYYYMMDD .

MOVE FUNCTION CONVERT-DATE-TIME
( WS-CURR-DATE DATE '%Y%m%d' ) TO MY-ISO-START-DATE .
DISPLAY 'My-ISO-Start-Date: ' MY-ISO-START-DATE .

If Cust-add-date < my-iso-start-date Then
DISPLAY "Start Date ' BEGIN-DATE " is prior to today."
Else
DISPLAY "Start Date " BEGIN-DATE " is *beyond* today." .


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.