Clsdate H
Clsdate H
com
//Mohammed Abu-Hadhoud
#pragma warning(disable : 4996)
#pragma once
#include<iostream>
#include<string>
#include "clsString.h"
class clsDate
{
private:
short _Day = 1;
short _Month = 1;
short _Year = 1900;
public:
clsDate()
{
time_t t = time(0);
tm* now = localtime(&t);
_Day = now->tm_mday;
_Month = now->tm_mon + 1;
_Year = now->tm_year + 1900;
}
clsDate(string sDate)
{
_Day = stoi(vDate[0]);
_Month = stoi(vDate[1]);
_Year = stoi(vDate[2]);
_Day = Day;
_Month = Month;
_Year = Year;
short GetDay() {
return _Day;
}
__declspec(property(get = GetDay, put = SetDay)) short Day;
short GetMonth() {
return _Month;
}
__declspec(property(get = GetMonth, put = SetMonth)) short Month;
short GetYear() {
return _Year;
}
__declspec(property(get = GetYear, put = SetYear)) short Year;
void Print()
{
cout << DateToString() << endl;
}
return true;
bool IsValid()
{
return IsValidDate(*this);
}
string DateToString()
{
return DateToString(*this);
}
bool isLeapYear()
{
return isLeapYear(_Year);
}
short NumberOfHoursInAYear()
{
return NumberOfHoursInAYear(_Year);
}
int NumberOfMinutesInAYear()
{
return NumberOfMinutesInAYear(_Year);
}
int NumberOfSecondsInAYear()
{
return NumberOfSecondsInAYear();
}
short NumberOfDaysInAMonth()
{
return NumberOfDaysInAMonth(_Month, _Year);
}
short NumberOfHoursInAMonth()
{
return NumberOfDaysInAMonth(_Month, _Year) * 24;
}
int NumberOfMinutesInAMonth()
{
return NumberOfHoursInAMonth(_Month, _Year) * 60;
}
int NumberOfSecondsInAMonth()
{
return NumberOfMinutesInAMonth(_Month, _Year) * 60;
}
short DayOfWeekOrder()
{
return DayOfWeekOrder(_Day, _Month, _Year);
}
return arrDayNames[DayOfWeekOrder];
string DayShortName()
{
string arrDayNames[] = { "Sun","Mon","Tue","Wed","Thu","Fri","Sat" };
string MonthShortName()
{
return MonthShortName(_Month);
}
if (++i == 7)
{
i = 0;
printf("\n");
}
}
printf("\n _________________________________\n");
}
void PrintMonthCalendar()
{
PrintMonthCalendar(_Month, _Year);
}
return;
}
void PrintYearCalendar()
{
printf("\n _________________________________\n\n");
printf(" Calendar - %d\n", _Year);
printf(" _________________________________\n");
return;
}
short TotalDays = 0;
TotalDays += Day;
return TotalDays;
}
short DaysFromTheBeginingOfTheYear()
{
short TotalDays = 0;
TotalDays += _Day;
return TotalDays;
}
clsDate Date;
short RemainingDays = DateOrderInYear;
short MonthDays = 0;
Date.Year = Year;
Date.Month = 1;
while (true)
{
MonthDays = NumberOfDaysInAMonth(Date.Month, Year);
return Date;
}
_Month = 1;
while (true)
{
MonthDays = NumberOfDaysInAMonth(_Month, _Year);
}
}
else
{
_Day = RemainingDays;
break;
}
bool IsLastDayInMonth()
{
return IsLastDayInMonth(*this);
return Date;
}
void AddOneDay()
{
*this = AddOneDay(*this);
}
clsDate TempDate;
TempDate = Date1;
Date1 = Date2;
Date2 = TempDate;
if (!IsDate1BeforeDate2(Date1, Date2))
{
//Swap Dates
SwapDates(Date1, Date2);
SawpFlagValue = -1;
return Date;
}
void IncreaseDateByOneWeek()
{
IncreaseDateByOneWeek(*this);
}
if (Date.Month == 12)
{
Date.Month = 1;
Date.Year++;
}
else
{
Date.Month++;
}
//last check day in date should not exceed max days in the current
month
// example if date is 31/1/2022 increasing one month should not be
31/2/2022, it should
// be 28/2/2022
short NumberOfDaysInCurrentMonth = NumberOfDaysInAMonth(Date.Month,
Date.Year);
if (Date.Day > NumberOfDaysInCurrentMonth)
{
Date.Day = NumberOfDaysInCurrentMonth;
}
return Date;
}
void IncreaseDateByOneMonth()
{
IncreaseDateByOneMonth(*this);
IncreaseDateByXDays(Days, *this);
}
void IncreaseDateByOneYear()
{
IncreaseDateByOneYear(*this);
}
void IncreaseDateByOneDecade()
{
IncreaseDateByOneDecade(*this);
}
void IncreaseDateByOneCentury()
{
IncreaseDateByOneCentury(*this);
}
clsDate IncreaseDateByOneMillennium()
{
IncreaseDateByOneMillennium(*this);
}
Date.Month--;
Date.Day = NumberOfDaysInAMonth(Date.Month, Date.Year);
}
}
else
{
Date.Day--;
}
return Date;
}
void DecreaseDateByOneDay()
{
DecreaseDateByOneDay(*this);
}
return Date;
}
void DecreaseDateByOneWeek()
{
DecreaseDateByOneWeek(*this);
}
if (Date.Month == 1)
{
Date.Month = 12;
Date.Year--;
}
else
Date.Month--;
//last check day in date should not exceed max days in the current
month
// example if date is 31/3/2022 decreasing one month should not be
31/2/2022, it should
// be 28/2/2022
short NumberOfDaysInCurrentMonth = NumberOfDaysInAMonth(Date.Month,
Date.Year);
if (Date.Day > NumberOfDaysInCurrentMonth)
{
Date.Day = NumberOfDaysInCurrentMonth;
}
return Date;
}
void DecreaseDateByOneMonth()
{
DecreaseDateByOneMonth(*this);
}
Date.Year--;
return Date;
}
void DecreaseDateByOneYear()
{
DecreaseDateByOneYear(*this);
}
Date.Year -= Years;
return Date;
}
void DecreaseDateByOneDecade()
{
DecreaseDateByOneDecade(*this);
}
void DecreaseDateByOneCentury()
{
DecreaseDateByOneCentury(*this);
}
void DecreaseDateByOneMillennium()
{
DecreaseDateByOneMillennium(*this);
}
short IsEndOfWeek()
{
return IsEndOfWeek(*this);
}
bool IsWeekEnd()
{
return IsWeekEnd(*this);
}
/*
short DayIndex = DayOfWeekOrder(Date.Day, Date.Month, Date.Year);
return (DayIndex >= 5 && DayIndex <= 4);
*/
//shorter method is to invert the IsWeekEnd: this will save updating code.
return !IsWeekEnd(Date);
bool IsBusinessDay()
{
return IsBusinessDay(*this);
}
short DaysUntilTheEndOfWeek()
{
return DaysUntilTheEndOfWeek(*this);
}
clsDate EndOfMontDate;
EndOfMontDate.Day = NumberOfDaysInAMonth(Date1.Month, Date1.Year);
EndOfMontDate.Month = Date1.Month;
EndOfMontDate.Year = Date1.Year;
short DaysUntilTheEndOfMonth()
{
return DaysUntilTheEndOfMonth(*this);
}
clsDate EndOfYearDate;
EndOfYearDate.Day = 31;
EndOfYearDate.Month = 12;
EndOfYearDate.Year = Date1.Year;
short DaysUntilTheEndOfYear()
{
return DaysUntilTheEndOfYear(*this);
}
DateFrom = AddOneDay(DateFrom);
}
return Days;
DateFrom = AddOneDay(DateFrom);
}*/
}
//above method is eough , no need to have method for the object
short WeekEndCounter = 0;
if (IsWeekEnd(DateFrom))
WeekEndCounter++;
DateFrom = AddOneDay(DateFrom);
}
//to add weekends
for (short i = 1; i <= WeekEndCounter; i++)
DateFrom = AddOneDay(DateFrom);
return DateFrom;
}
if (IsDate1EqualDate2(Date1, Date2))
return enDateCompare::Equal;
/* if (IsDate1AfterDate2(Date1,Date2))
return enDateCompare::After;*/
//this is faster
return enDateCompare::After;
};