两个日期之间的月数 - 使用提升日期

Mar*_*inP 10 c++ boost date

我现在使用了boost :: gregorian :: date.

我可以看到有相关的月份,年份和周数持续时间类型.我可以看到如何使用已知的持续时间来推进给定的日期.

:但是如何才能在几个月(或几年或几周)内得出两个日期之间的差异?

我希望找到一个像以下的功能:

template<typename DURATION>
  DURATION date_diff<DURATION>(const date& d1,const date& d2);
Run Code Online (Sandbox Code Playgroud)

还需要对圆角进行一些处理.

此函数将返回d1和d2之间(比方说)整月的数量.

小智 12

你的意思是日期之间的差异(09/12 - 08/05 = 01/07 = 19个月)或时间差((date2_seconds - date1_seconds)/ seconds_per_month)?

对于第一种情况,可以使用访问器

greg_year date::year() const;
greg_month date::month() const;
Run Code Online (Sandbox Code Playgroud)

那么月份之间的差异:

int months = (data2.year() - date1.year())*12 + date2.month() - date1.month()
Run Code Online (Sandbox Code Playgroud)

对于第二种情况,你有运营商

date_duration date::operator-(date) const;
Run Code Online (Sandbox Code Playgroud)

并且date_duration具有以下有用成员:

long date_duration::days() const;
Run Code Online (Sandbox Code Playgroud)

所以你可以这样做:

//date date1, date2
int months = (date2-date1).days()/30;
Run Code Online (Sandbox Code Playgroud)