# Re: [U2] End of Month date routine

```
Tdate = OCONV(DATE(),"D4-")
mm1= Tdate[1,2]+1
yyyy1 = Tdate[7,4]
if mm1 > 12 then
mm1 = "01"
yyyy1 += 1
end
EDATE = ICONV(mm1:"-01-":yyyy1,"D4-") - 1
EDATE = OCONV(EDATE,"D2/");**** here is external format end-of-month ****```
```
-----Original Message-----
From: Rick Nuckolls <r...@lynden.com>
To: U2 Users List <u2-users@listserver.u2ug.org>
Sent: Mon, Dec 5, 2011 5:00 pm
Subject: Re: [U2] End of Month date routine

Just for laughs, the following works with only a single date conversion, though
will admit that it gets a little too obscure to be considered maintainable.
dmittedly, there are probably easier ways to tell how many days there are in a
onth, but they may not be as much fun!
Rick Nuckolls
ynden Inc

extdate = oconv( d, 'D4-YMD')
year = field(extdate, '-',1)
month = field( extdate, '-', 2)
dom = field(extdate,'-',3)
if month = 2 then
daysinmonth = 28 + ( not(mod(year,4)) & ( mod(year,100) !
ot(mod(year,400)) ))
end else
daysinmonth = 30 + mod( if month < 8 then abs(month-2) else month-7,
)
end
lastdayofmonth = d - dom + daysinmonth

n Dec 5, 2011, at 2:26 PM, Wjhonson wrote:
>
I changed Marco's code slightly using Oconv to make it more clear what DD is
oing and make it more generic
I'm also adding 40 instead of 32 to make it clear that we don't care how much
e are adding as long as it's between 32 and 57
To make it clear what this is doing, we are taking the internal date, and
ubtracting from that the "day number" on which we are running.
This will *always* give you the last day of the previous month.  Always.
Then we add enough to jump us into the next month anywhere, doesn't matter at
ll.
And then do the same trick again, which will *always* give you the last day of
he month in which you are running
This is a fantastic bit of magic.

TODAY = DATE() ; LAST.MO.END = TODAY - OCONV(TODAY,'DD')
A.DAY.NEXT.MO = LAST.MO.END + 40
END.OF.MO.DATE = A.DAY.NEXT.MO - OCONV(A.DAY.NEXT.MO,'DD')

-----Original Message-----
From: Wjhonson <wjhon...@aol.com>
To: u2-users <u2-users@listserver.u2ug.org>
Sent: Mon, Dec 5, 2011 2:15 pm
Subject: Re: [U2] End of Month date routine

arco, this is absolutely brilliant.
nd I reserve the use of the word "brilliant", for code that truly transcends
ormal space-time
'm not certain that the use of "DD" is vendor independent, but it could be
ade
o, by merely using OCONV(TODAY, 'DD') instead

-----Original Message-----
rom: Marco Antonio Rojas Castro <marco_roja...@hotmail.com>
o: u2-users <u2-users@listserver.u2ug.org>
ent: Mon, Dec 5, 2011 12:49 pm
ubject: Re: [U2] End of Month date routine

ODAY = DATE()
M = TODAY - TODAY"DD" + 32
M = EOM - EOM"DD"

To: u2-users@listserver.u2ug.org
From: wjhon...@aol.com
Date: Mon, 5 Dec 2011 15:16:02 -0500
Subject: Re: [U2] End of Month date routine

Doesn't work on my system Anthony.
The This month o gives the month and year ok
but the attempt to iconv that sets it to zero, it doesn't pad the "01" into it
> something
so i just get 31 at that point.

I think you were expecting that it would take "12 2011" and make it into "12
2011" or whatever
but it's not working

-----Original Message-----
From: George Gallen <ggal...@wyanokegroup.com>
To: U2 Users List <u2-users@listserver.u2ug.org>
Sent: Mon, Dec 5, 2011 12:10 pm
Subject: Re: [U2] End of Month date routine

Haven't checked it, but what happens on 01/31 by adding 31, it should take you
> arch, backing up
Will give you 02/xx (28 or 29)?
George
-----Original Message-----
rom: u2-users-boun...@listserver.u2ug.org
[mailto:u2-users-boun...@listserver.u2ug.org]
>> n Behalf Of Wols Lists
ent: Monday, December 05, 2011 3:05 PM
o: u2-users@listserver.u2ug.org
ubject: Re: [U2] End of Month date routine
On 05/12/11 19:03, Wjhonson wrote:

Does someone have a routine that, no matter what day you run it, returns the
nd of Month Date ?
(Assume the end of month date, is the calendar end of month date not some
crewy business date)
Hmmm... no-one seems to have done my approach ...
TODAY = @DATE
HIS.MONTH.O = OCONV (TODAY, "DMY") ;* strip day off
EXT.MONTH.I = ICONV( THIS.MONTH.O, "D") + 31 ;* random day next month
EXT.MONTH.O = OCONV( NEXT.MONTH.I, "DMY") ;* strip day off
AST.DAY.I = ICONV( NEXT.MONTH.O, "D") - 1 ;* subract one day
If you don't have a day in your i/oconv it defaults to 1, so the logic
orks. Unfortunately you can't combine the first three lines because
here's no number you can pick that will guarantee to land you in next
onth whatever today's date :-(
Cheers,
ol
______________________________________________
2-Users mailing list
2-us...@listserver.u2ug.org
ttp://listserver.u2ug.org/mailman/listinfo/u2-users
______________________________________________
2-Users mailing list
2-us...@listserver.u2ug.org
ttp://listserver.u2ug.org/mailman/listinfo/u2-users

_______________________________________________
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users

_____________________________________________
-Users mailing list
-us...@listserver.u2ug.org
tp://listserver.u2ug.org/mailman/listinfo/u2-users
_______________________________________________
2-Users mailing list
2-us...@listserver.u2ug.org
ttp://listserver.u2ug.org/mailman/listinfo/u2-users

_______________________________________________
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users
_______________________________________________
2-Users mailing list
2-us...@listserver.u2ug.org
ttp://listserver.u2ug.org/mailman/listinfo/u2-users

_______________________________________________
U2-Users mailing list
U2-Users@listserver.u2ug.org
http://listserver.u2ug.org/mailman/listinfo/u2-users
```