As AD says, "What do you want from us?" - you just say you want help, but with what? For whatever it's worth (FWIW), date manipulation classes should use Julian dates (integral or floating-point numbers representing the date/date+time - no years, months, days). Then, date arithmetic is simple, and the same equations are used to convert the julian value to the current year+month+day (+ optionally time). This is how it is done for professionally written programs. Here is the header for a Julian date class that I wrote some time ago:
class Date
{
private:
uint32_t m_JulianDate;
public:
/**
* Date constructed from a system time value. Since these are trivially
* created from struct tm objects using the system ::mktime() function,
* we don't need a constructor for that structure type. Use of a
* default argument makes this the default constructor.
*/
Date( time_t ctm = ::time(0) );
/**
* Create date object with specified year, month, and day where
* the date is in the Gregorian calendar from 15 October 1582 on.
* The 32bit unsigned integer value will store dates until sometime
* after the year 5,878,800.
*/
Date(int year, int month, int day);
/**
* Date constructed from string. The 'fmt' argument specifies how the string is to
* be decoded, using the same tokens as is used for output by the asString()
* method and the system strftime() function.
*/
Date(const char* dateStr, const char* fmt = "%Y%m%d");
/**
* Date constructed …