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

时间:2010-04-26 15:29:12

标签: c++ boost date

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

我可以看到有相关的月份&岁月周持续时间类型。 我可以看到如何使用已知的持续时间来推进给定的日期。

Qu :但我怎样才能在几个月(或几年或几周)内得出两个日期之间的差异?

我希望找到像以下这样的功能:

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

也需要处理四舍五入。

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

1 个答案:

答案 0 :(得分: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;

然后是几个月的日期差异:

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;