# Boost :

From: Jeff Garland (jeff_at_[hidden])
Date: 2004-04-24 08:35:49

On Fri, 23 Apr 2004 23:22:34 -0400, Daryle Walker wrote
> [NOTE: I haven't worked on this library; I'm just going by the posts
> I see here.]
>
> For this increment/decrement by a month problem, is there any way to
> store a date with only a month resolution? Nothing smaller will be
> stored, so day crossovers won't be a problem.

I think what you mean is a 'duration' with month resolution. Ala
months m1(3);
months m2(2);
months m3 = m2 + m1;
//...

This can be done, but the issue is that to work with the date timepoint
calculation is done at single day resolution. And there isn't a fixed number
of days in a month, so you CANNOT say:
days dd(28) == months(1); //proposition 1

Similarly the following is NOT true:
days dd(365) == years(1); //proposition 2

Conversly, you can always say this:
days dd(28) == weeks(4);

So the problem is while a week is a fixed length that is well known to be 7
days, a month and year are not. The length of a month and year depends on the
context of the date. So people want the following sort of behavior:
date d1 += months(12); //if d1 is a leap year add 366 days instead of 365

Unfortunately, as soon as you start accepting these sorts of adjustments you
lose the mathmatical properties that you might expect:
date d1 += months(1);
date d2 = d1 - months(1);
d2 == d1 //Sorry, not always true...

If instead you are willing to accept proposition 1 and 2 above then this is
all trivial...

> Wouldn't something