Оператор должен возвращать разницу между двумя датами. Проблема возникает, когда прошедшая дата больше даты по умолчанию: 31.03.2010. Он всегда возвращает на один день меньше, чем предполагалось. Это означает, что при прохождении (31.03.2010) и (01.04.2010) оба возвращают 0 дней, при прохождении (02.04.2010) возвращаются 1 день (хотя на самом деле он должен возвращать 2 дня) и т. Д. . Я мог бы обойти проблему с помощью if (), но, как я уже сказал, обе эти даты возвращают одинаковую разницу, поэтому я не могу использовать это, чтобы различать guish их. Любая помощь приветствуется.
Date Date::operator-(Date d2)
{
Date diff;
int totaldays1, totaldays2, diffIndays;
totaldays1 = (year*365)+(month*30)+(day);
totaldays2 = (d2.year*365)+(d2.month*30)+(d2.day);
diffIndays = totaldays2 - totaldays1;
diff.year = diffIndays/365;
diff.month = (diffIndays-(diff.year*365))/30;
diff.day = diffIndays - (diff.year*365) - (diff.month*30);
cout<<"\n"<<totaldays1;
cout<<"\n"<<totaldays2<<"\n";
return diff;
}
int main()
{
Date d1(3,31,2010); //31 March, 2010
Date d2;
Date d3;
int diffInDays;
d3 = d2 - d1;
diffInDays = abs(d3.getDay())+abs(d3.getMonth()*30)+abs(d3.getYear()*365);
cout<<"Difference between "<<d1<<" & "<<d2<<" = "
<< abs(diffInDays)<<" days.";
}