The difference between the dates in years

Alexander Zhirov azhirov1991 at gmail.com
Sat Feb 10 19:16:35 UTC 2024


On Saturday, 10 February 2024 at 18:12:07 UTC, Alexander Zhirov 
wrote:
> On Saturday, 10 February 2024 at 16:03:32 UTC, H. S. Teoh wrote:
>> On Sat, Feb 10, 2024 at 03:53:09PM +0000, Alexander Zhirov via 
>> Digitalmars-d-learn 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.
>>
>> IIRC you can just subtract two DateTime's to get a Duration 
>> that you can then convert into whatever units you want.  Only 
>> thing is, in this case conversion to months may not work 
>> because months don't have a fixed duration (they can vary from 
>> 28 days to 31 days) so there is no "correct" way of computing 
>> it, you need to program it yourself according to the exact 
>> calculation you want.
>>
>>
>> T
>
> I did it this way, but there will be an inaccuracy, since 
> somewhere there may be 366 days, and somewhere 365
>
> ```
> auto d = cast(Date)Clock.currTime() - 
> Date.fromISOExtString("2001-02-01");
> writeln(d.total!"days"().to!int / 365);
> ```

```
int getDiffYears(string date) {
     auto currentDate = cast(Date)Clock.currTime();
     auto startDate = Date.fromISOExtString(date);
     auto currentDay = currentDate.dayOfYear;
     auto startDay = startDate.dayOfYear;
     auto currentMonth = currentDate.month;
     auto startMonth = startDate.month;
     auto diffDays = currentDate - startDate;
     auto diffYears = diffDays.total!"days"().to!int / 365;

	return currentMonth >= startMonth && currentDay >= startDay ? 
diffYears : diffYears - 1;
}
```


More information about the Digitalmars-d-learn mailing list