On Saturday, 10 February 2024 at 19:16:35 UTC, Alexander Zhirov
wrote:
...
Maybe this will help: I think if you will divide it can't be 365,
but 365.242199.
About your code: I having tested fully, but I found a few
problems and I wrote (Again without further tests) as below:
import std;
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;
}
int getDiffYears2(string date) {
auto now = cast(Date)Clock.currTime();
auto from = Date.fromISOExtString(date);
auto dy = now.year-from.year;
auto dm = (from.month-now.month);
auto dd = (dm == 0 && from.day>now.day);
return dy - 1 * (dm > 0 || dd);
}
void main(){
writeln("2001-02-09 is ", getDiffYears("2001-02-09"));
writeln("2001-02-10 is ", getDiffYears("2001-02-10"));
writeln("2001-02-11 is ", getDiffYears("2001-02-11"));
writeln("2001-03-01 is ", getDiffYears("2001-03-01"));
writeln("");
writeln("2001-02-09 is ", getDiffYears2("2001-02-09"));
writeln("2001-02-10 is ", getDiffYears2("2001-02-10"));
writeln("2001-02-11 is ", getDiffYears2("2001-02-11"));
writeln("2001-03-01 is ", getDiffYears2("2001-03-01"));
}
Output:
2001-02-09 is 23
2001-02-10 is 23
2001-02-11 is 22
2001-03-01 is 21
2001-02-09 is 23
2001-02-10 is 23
2001-02-11 is 22
2001-03-01 is 22
Matheus.