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

Rick Nuckolls
Lynden 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) ! 
not(mod(year,400)) ))
         end else
            daysinmonth = 30 + mod( if month < 8 then abs(month-2) else 
month-7, 2)
         end

         lastdayofmonth = d - dom + daysinmonth


On 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 
> doing and make it more generic
> I'm also adding 40 instead of 32 to make it clear that we don't care how much 
> we 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 
> subtracting 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 
> all.
> And then do the same trick again, which will *always* give you the last day 
> of the 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 
> made 
> 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

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

Reply via email to