Перегруженный оператор- () для возврата разницы между двумя датами - PullRequest
0 голосов
/ 03 августа 2020

Оператор должен возвращать разницу между двумя датами. Проблема возникает, когда прошедшая дата больше даты по умолчанию: 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.";
}
...