#pragma once #include class Date { public: Date(int year, int month, int day) { Date::date_year = year; Date::date_month = month; Date::date_day = day; } bool IsLeap() const { if (date_year % 4 == 0) { if (date_year % 100 == 0) { if (date_year % 400 == 0) { return true; } else { return false; } } else { return true; } } return false; } std::string ToString() { std::string string_day = std::to_string(date_day); std::string string_month = std::to_string(date_month); std::string string_year = std::to_string(date_year); if (date_day < 10) { string_day = "0" + string_day; } if (date_month < 10) { string_month = "0" + string_month; } if (date_year < 10) { string_year = "000" + string_year; } else if (date_year >= 10 && date_year < 100) { string_year = "00" + string_year; } else if (date_year >= 100 && date_year < 1000) { string_year = "0" + string_year; } return string_day + "." + string_month + "." + string_year; } Date DaysLater(int days) { if (date_day + days == date_day) { return {date_year, date_month, date_day}; } else { while (days > 0) { days--; if (date_month == 2 && date_day == 28) { if (Date{date_year, date_month, date_day}.IsLeap()) { date_day++; } } else if (date_month == 12 && date_day == 31) { date_day = 1; date_month = 1; date_year++; } else if (date_day < count_of_days[date_month]) { date_day++; } else { date_day = 1; date_month++; } } } return {date_year, date_month, date_day}; } int DaysLeft(const Date& date) { int counter = 0; while ((date_year != date.date_year) && \ (date_month != date.date_month) && \ (date_day != date.date_day)) { if (date_month == 2 && date_day == 28) { if (Date{date_year, date_month, date_day}.IsLeap()) { counter++; date_day++; } } else if (date_month == 12 && date_day == 31) { date_day = 1; date_month = 1; date_year++; counter++; } else if (date_day < count_of_days[date_month]) { date_day++; counter++; } else { date_day = 1; date_month++; counter++; } } return counter; } private: int date_year; int date_month; int date_day; int count_of_days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; };