Hi,
Generraly when you deal with dates (another example is Currency) you should use COle classes.
In this case you should have your own class derived from COleDateTime and have implemented operators ==, <, > != etc... This is not trivial when the dates contain date (ymd), time h,m,s and miliseconds.
I post for you the CAppDate class which is working very well. You should take out or replace care about LogError() function that was required due to the specific requirements.
For your answer see the < and > operators.
//
// -obislavu- 1999-07-01
//
class CAppDate : public COleDateTime
{
public:
CAppDate() : COleDateTime() {}
CAppDate(LPCTSTR pszDate);
BOOL ParseDate(LPCTSTR pszDate);
BOOL IsValid() const { return GetStatus() == valid; }
BOOL IsEmpty() const;
void SetEmpty();
static CAppDate GetLowValueDate() { return m_dtLowValue; }
static CAppDate GetHighValueDate() { return m_dtHighValue; }
static void SetDefaultFormat(const CString& sFormat) { m_sDefaultFormat=sFormat; }
static const CString& GetDefaultFormat() { return m_sDefaultFormat; }
CString Format(LPCTSTR pszFormat=NULL) const;
CAppDate& operator=(LPCTSTR pszDate);
BOOL operator==(const CAppDate& dt) const;
BOOL operator!=(const CAppDate& dt) const;
BOOL operator>(const CAppDate& dt) const;
BOOL operator>=(const CAppDate& dt) const;
BOOL operator<(const CAppDate& dt) const;
BOOL operator<=(const CAppDate& dt) const;
private:
double DoubleFromDate(DATE dt) const;
static CString m_sDefaultFormat;
static CAppDate m_dtLowValue;
static CAppDate m_dtHighValue;
};
CString CAppDate::m_sDefaultFormat = "%Y%m%d";
CAppDate CAppDate::m_dtLowValue = "0100-01-01";
CAppDate CAppDate::m_dtHighValue = "9999-12-31";
/////////////////////////////////////////////////////////////////////////////
// CAppDate
CAppDate::CAppDate(LPCTSTR pszDate) : COleDateTime()
{
*this = pszDate;
}
BOOL CAppDate::IsEmpty() const
{
return m_dt == 0.0;
}
void CAppDate::SetEmpty()
{
SetDate(0,0,0);
m_dt = 0.0;
// Calling SetDate function with parameters (0,0,0) will NOT set m_dt value to 0.
// It will only turn the m_status flag to invalid.
//
}
BOOL CAppDate:

arseDate(LPCTSTR pszDate)
{
CString sDate = pszDate;
if ( sDate.FindOneOf(" -/"

== -1 && sDate.GetLength() == 8 )
{
sDate = sDate.Left(4) + "-" + sDate.Mid(4,2) + "-" + sDate.Right(2);
}
return ParseDateTime( sDate, VAR_DATEVALUEONLY);
}
CString CAppDate::Format(LPCTSTR pszFormat/*=NULL*/) const
{
if ( IsEmpty() )
return "";
else
if ( pszFormat == NULL )
return COleDateTime::Format(m_sDefaultFormat);
else
return COleDateTime::Format(pszFormat);
}
CAppDate& CAppDate:

perator=(LPCTSTR pszDate)
{
BOOL bValid = ParseDate(pszDate);
CString sDate(pszDate);
sDate.TrimLeft();
sDate.TrimRight();
if ( !sDate.IsEmpty() && !bValid )
m_dt = 1.0;
return *this;
}
BOOL CAppDate:

perator==(const CAppDate& dt) const
{
if ( !IsEmpty() && !IsValid() )
{
CString msg;
msg.Format(LOG_IDS_INVALIDCONDITION, _T("IsEmpty() || IsValid()"

);
//LogError
}
return DoubleFromDate(m_dt) == DoubleFromDate(dt.m_dt);
}
BOOL CAppDate:

perator!=(const CAppDate& dt) const
{
if ( !IsEmpty() && !IsValid() )
{
CString msg;
msg.Format(LOG_IDS_INVALIDCONDITION, _T("IsEmpty() || IsValid()"

);
//LogError
}
return DoubleFromDate(m_dt) != DoubleFromDate(dt.m_dt);
}
BOOL CAppDate:

perator>(const CAppDate& dt) const
{
if ( !IsEmpty() && !IsValid() )
{
CString msg;
msg.Format(LOG_IDS_INVALIDCONDITION, _T("IsEmpty() || IsValid()"

);
//LogError
}
return DoubleFromDate(m_dt) > DoubleFromDate(dt.m_dt);
}
BOOL CAppDate:

perator>=(const CAppDate& dt) const
{
if ( !IsEmpty() && !IsValid() )
{
CString msg;
msg.Format(LOG_IDS_INVALIDCONDITION, _T("IsEmpty() || IsValid()"

);
//LogError
}
return DoubleFromDate(m_dt) >= DoubleFromDate(dt.m_dt);
}
BOOL CAppDate:

perator<(const CAppDate& dt) const
{
if ( !IsEmpty() && !IsValid() )
{
CString msg;
msg.Format(LOG_IDS_INVALIDCONDITION, _T("IsEmpty() || IsValid()"

);
//LogError
}
return DoubleFromDate(m_dt) < DoubleFromDate(dt.m_dt);
}
BOOL CAppDate:

perator<=(const CAppDate& dt) const
{
if ( !IsEmpty() && !IsValid() )
{
CString msg;
msg.Format(LOG_IDS_INVALIDCONDITION, _T("IsEmpty() || IsValid()"

);
//LogError
}
return DoubleFromDate(m_dt) <= DoubleFromDate(dt.m_dt);
}
double CAppDate:

oubleFromDate(DATE dt) const
{
// No problem if positive
if (dt >= 0)
return dt;
// If negative, must convert since negative dates not continuous
// (examples: -1.25 to -.75, -1.50 to -.50, -1.75 to -.25)
double temp = ceil(dt);
return temp - (dt - temp);
}
-obislavu-