Я использовал повышение:: грегорианский:: дата немного теперь.
Я вижу, что существуют связанные месяцы и годы и недельные типы продолжительности. Я вижу, как использовать известные продолжительности для усовершенствования данной даты.
Qu: Но как я могу получить различие между двумя датами в течение многих месяцев (или годы или недели)?
Я надеялся найти функцию как:
template<typename DURATION>
DURATION date_diff<DURATION>(const date& d1,const date& d2);
Должна была бы быть некоторая обработка округления также.
Эта функция возвратилась бы, количество (говорят) целые месяцы между d1 и d2.
Вы имеете в виду разницу между датами (09/12 - 08/05 = 01/07 = 19 месяцев) или разницу во времени ((date2_seconds - date1_seconds) / seconds_per_month)?
Для первого случая можно использовать аксессоры
greg_year date::year() const;
greg_month date::month() const;
Затем разница между датами в месяцах:
int months = (data2.year() - date1.year())*12 + date2.month() - date1.month()
Для второго случая есть оператор
date_duration date::operator-(date) const;
И date_duration имеет следующий полезный член:
long date_duration::days() const;
Итак вы можете сделать это так:
//date date1, date2
int months = (date2-date1).days()/30;