The code in PFC 5.4 code seems to work fine for any date( don't understand
why its been changed ) - why don't you copy that as its simpler than the
code you've written.
////////////////////////////////////////////////////////////////////////////
//
//
// Function: of_LastDayOfMonth
//
// Access: public
//
// Arguments:
// ad_source Date to test.
//
// Returns: date
// The last date of the month
passed.
// If any argument's value is
NULL, function returns NULL.
// If any argument's value is
Invalid, function returns 1900-01-01.
//
// Description: Given a date, will determine the last day of the
month.
//
////////////////////////////////////////////////////////////////////////////
//
//
// Revision History
//
// Version
// 5.0 Initial version
// 5.0.03 Fixed - function would fail under some international date
sets
// 5.0.04 Remove invalid date loop. Use DaysInMonth array to find end
of month
//
////////////////////////////////////////////////////////////////////////////
//
//
// Copyright � 1996-1997 Sybase, Inc. and its subsidiaries. All rights
reserved.
// Any distribution of the PowerBuilder Foundation Classes (PFC)
// source code by other than Sybase, Inc. and its subsidiaries is
prohibited.
//
////////////////////////////////////////////////////////////////////////////
//
integer li_year, li_month, li_day
//Check parameters
If IsNull(ad_source) Then
date ldt_null
SetNull(ldt_null)
Return ldt_null
End If
//Check for invalid date
If Not of_IsValid(ad_source) Then
Return ad_source
End If
li_year = Year(ad_source)
li_month = Month(ad_source)
li_day = ii_DaysInMonth[li_month]
// Check for Leap year
If li_month = 2 Then
If of_IsLeapYear(ad_source) Then
li_day = 29
End If
End IF
Return (Date(li_year, li_month, li_day))
///////////////////
// Instance variable
//
//protected:
//
//integer ii_DaysInMonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31}
> -----Original Message-----
> From: Crawford, Robert [SMTP:[EMAIL PROTECTED]]
> Sent: 02 September 1999 17:22
> To: '[EMAIL PROTECTED]'
> Subject: PFCSIG RE: re: Known Bug in
> pfc_n_cst_datetime(OF_LastDayOFMonth())
>
> I decided to fix the object function
> pfc_n_cst_datetime(OF_LastDayOFMonth())
> in my corporate layer ..... Code follows if anyone wants or needs .....
> //////////////////////////////////////////////////////////////////////////
> //
> //
> //
> // Function: of_LastDayOfMonth
> //
> // Access: public
> //
> // Arguments:
> // ad_source Date to test.
> //
> // Returns: date
> // The last date of the month
> passed.
> // If any argument's value is
> NULL, function returns NULL.
> // If any argument's value is
> Invalid, function returns 1900-01-01.
> //
> // Description: Given a date, will determine the last day of the
> month.
> //
> //////////////////////////////////////////////////////////////////////////
> //
> //
> //
> // Revision History
> //
> // Version
> // 5.0 Initial version
> // 5.0.03 Fixed - function would fail under some international date
> sets
> // 6.5 09/02/1999 RJ Crawford Fixed - Function would return invalid
> date if
> month
> // passed had any value other than 31
>
> // (Good Job Powersoft !)
> //
> //////////////////////////////////////////////////////////////////////////
> //
> //
> //
> // Copyright � 1996-1997 Sybase, Inc. and its subsidiaries. All rights
> reserved.
> // Any distribution of the PowerBuilder Foundation Classes (PFC)
> // source code by other than Sybase, Inc. and its subsidiaries is
> prohibited.
> //
> //////////////////////////////////////////////////////////////////////////
> //
> //
>
> integer li_year, li_month, li_day
>
> //Check parameters
> If IsNull(ad_source) Then
> date ldt_null
> SetNull(ldt_null)
> Return ldt_null
> End If
>
> //Check for invalid date
> If Not of_IsValid(ad_source) Then
> Return ad_source
> End If
>
> li_year = Year(ad_source)
> li_month = Month(ad_source)
> li_day = 31
>
> CHOOSE CASE li_Month
> CASE 4,6,9,11
> li_day = 30
> CASE 2
> IF of_isleapyear(ad_source) THEN
> li_day = 29
> ELSE
> li_day = 28
> END IF
> END CHOOSE
>
> //Check for a valid day (i.e., February 30th is never a valid date)
>
> // NOTE::: Bug in loop - DATE function returns 1900-01-01 if out of range
> date passed. The function of_IsValid(1900-01-01) retuns this // as a valid
> date so li_day stays as the initialized value of 31 and 09/31/99 get
> return
> as the last day of month which is invalid .....
>
> Do While Not of_IsValid(Date(li_year, li_month, li_day)) &
> and li_day > 0
> li_day --
> Loop
>
> Return (Date(li_year, li_month, li_day))
>
>
>
> > -----Original Message-----
> > From: Crawford, Robert
> > Sent: Thursday, September 02, 1999 10:08 AM
> > To: '[EMAIL PROTECTED]'
> > Subject: re: Known Bug in pfc_n_cst_datetime(OF_LastDayOFMonth())
> >
> > PB/PFCers ... Has anyone come across the bug in object function of
> > pfc_n_cst_datetime named of_lastdayofmonth(Today()) .... It returns an
> > invalid date whenever the month has 30 days ....(like this one !!!) ....
> > Is there a fix or should I make my own mods ???? Thanks .... RJC
> > [EMAIL PROTECTED] HOSTED BY IIGG, INC. FOR HELP WITH LIST SERVE COMMANDS,
> ADDRESS
> > A MESSAGE TO [EMAIL PROTECTED] WITH THE FOLLOWING MESSAGE: help
> pfcsig
> > SEND ALL OTHER INQUIRES TO [EMAIL PROTECTED]
> [EMAIL PROTECTED] HOSTED BY IIGG, INC. FOR HELP WITH LIST SERVE COMMANDS, ADDRESS
> A MESSAGE TO [EMAIL PROTECTED] WITH THE FOLLOWING MESSAGE: help pfcsig
> SEND ALL OTHER INQUIRES TO [EMAIL PROTECTED]