The difference between the dates in years

Lance Bachmeier no at spam.net
Sat Feb 10 21:58:21 UTC 2024


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;
	}
}
```


More information about the Digitalmars-d-learn mailing list