Determining the difference between dates

后端 未结 8 1873
無奈伤痛
無奈伤痛 2020-12-10 04:34

I\'m trying to figure out a way for my program to take a date (like February 2nd, 2003) and show the difference between the two with another date (like April 2nd, 2012), exc

8条回答
  •  南方客
    南方客 (楼主)
    2020-12-10 05:29

    Here is a complete code to calculating date difference in y/m/d.

    Assuming that to and from are date types, and that months and days start from 1 (similar to Qt):

    static int increment[12] = { 1, -2, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1 };
    
    int daysInc = 0;
    if (to.day() - from.day() < 0)
    {
        int month = to.month() - 2; // -1 from zero, -1 previous month.
        if (month < 0)
            month = 11; // Previous month is December.
        daysInc = increment[month];
        if ( (month == 1) && (to.year()%4 == 0) )
            daysInc++; // Increment days for leap year.
    }
    
    int total1 = from.year()*360 + from.month()*30 + from.day();
    int total2 = to.year()*360 + to.month()*30 + to.day();
    int diff = total2 - total1;
    int years = diff/360;
    int months = (diff - years*360)/30;
    int days = diff - years*360 - months*30 + daysInc;
    
    // Extra calculation when we can pass one month instead of 30 days.
    if (from.day() == 1 && to.day() == 31) {
        months--;
        days = 30;
    }
    

    I tried this algorithm and it is working okay. Let me know if you have troubles using/understanding it.

提交回复
热议问题