количество месяцев между двумя датами - с использованием даты повышения - PullRequest
10 голосов
/ 26 апреля 2010

Я немного использовал boost :: gregorian :: date.

Я вижу, что существуют типы месяцев, лет, недель. Я вижу, как использовать известные длительности для продвижения на заданную дату.

Qu : Но как узнать разницу между двумя датами в месяцах (или годах или неделях)?

Я надеялся найти такую ​​функцию, как:

template<typename DURATION>
  DURATION date_diff<DURATION>(const date& d1,const date& d2);

Также потребуется некоторая обработка округления.

Эта функция будет возвращать количество (скажем) целых месяцев между d1 и d2.

1 Ответ

12 голосов
/ 26 апреля 2010

Вы имеете в виду разницу между датами (09/12 - 08/05 = 01/07 = 19 месяцев) или разницу во времени ((date2_seconds - date1_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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...