On Saturday, 10 February 2024 at 21:56:30 UTC, Lance Bachmeier wrote:
On Saturday, 10 February 2024 at 15:53:09 UTC, Alexander Zhirov wrote:
Is it possible to calculate the difference between dates in years using regular means? Something like that

```
writeln(Date(1999, 3, 1).diffMonths(Date(1999, 1, 1)));
```

At the same time, keep in mind that the month and day matter, because the difference between the year, taking into account the month that has not come, will be less.

My abilities are not yet enough to figure it out more elegantly.

I'm assuming you mean you want the number of full years between the dates. If so, I use something like this:

```
import std;

void main() {
        writeln(fullYears(Date(1999, 3, 1), Date(1999, 2, 1)));
        writeln(fullYears(Date(2000, 3, 1), Date(1999, 2, 1)));
        writeln(fullYears(Date(2000, 3, 1), Date(1999, 4, 1)));
        writeln(fullYears(Date(2006, 4, 1), Date(1999, 4, 1)));
}

bool earlierInYear(Date date1, Date date2) {
        return date1 < Date(date1.year, date2.month, date2.day);
}

long fullYears(Date date1, Date date2) {
        assert(date1 >= date2, "The first date has to be later");
        if (date1.earlierInYear(date2)) {
                return max(date1.year - date2.year, 0);
        } else {
                return date1.year - date2.year;
        }
}
```

should be

```
long fullYears(Date date1, Date date2) {
        assert(date1 >= date2, "The first date has to be later");
        if (date1.earlierInYear(date2)) {
                return max(date1.year - date2.year - 1, 0);
        } else {
                return date1.year - date2.year;
        }
}
```

Reply via email to