Eintrag: Nr. 168 vom 25.08.2019
Stichwörter: C++, Computer, Open Source, Programmieren, Qt

Calculating the difference between two QDates

I wanted to calculate the difference between two QDates. Not only the days, but also the years, months, and weeks (for use in KPhotoAlbum).

I ended up using the following algorithm:

struct DateDifference {
    int years;
    int months;
    int days;
};

DateDifference Utilities::dateDifference(const QDate &date, const QDate &reference)
{
    if (date > reference) {
        return dateDifference(reference, date);
    }

    int years = reference.year() - date.year();
    int months = reference.month() - date.month();
    if (reference.month() < date.month()
        || ((reference.month() == date.month()) && (reference.day() < date.day()))) {
        years--;
        months += 12;
    }
    if (reference.day() < date.day()) {
        months--;
    }

    int remainderMonth = reference.month() - (reference.day() < date.day());
    int remainderYear = reference.year();
    if (remainderMonth == 0) {
        remainderMonth = 12;
        remainderYear--;
    }
    int days = QDate(remainderYear, remainderMonth, date.day()).daysTo(reference);

    return DateDifference { years, months, days };
}

Perhaps, this will help somebody.

I also filed a Feature request about adding such a function to Qt directly. Hopefully, it will be added in Qt 5.14 (to the new QCalendar class) :-)


 

nasauber.de © 2005–2019 Tobias Leupold | Impressum | Datenschutz