YearsBetween
YearsBetween returns the approximate number of years between two specified TDateTime values.
Because years are not all the same length (e.g. leap years), YearsBetween returns an approximation based on an assumption of 365.25 days per year.
Fractional years are not counted, so the function will return a whole integer value only.
2023 is not a leap year. 2024 is a leap year.
For example, YearsBetween reports the difference between Jan 1st 2023 and December 31st 2023 as zero (0), and also returns the difference between Jan 1st 2024 and December 31st 2024 as zero (0) - regardless of whether a leap year is included.
The ordering of the two dates doesn't matter - the number of years will not be negative.
Declaration: Function YearsBetween(const ANow: TDateTime; const AThen: TDateTime): Integer
As an example.
procedure OnMapEvent(var Value:Variant);var vYear, vDate : TDateTime; vStrYear, vStrDate : string; vBetwix : integer;begin //Result is 0 whole years - run-date to run-date plus 1 month vBetwix := YearsBetween(Date, IncMonth(Date, 1)); LogInfo(IntToStr(vBetwix)); LogInfo(''); //Result is 0 whole years - 6 months only vStrDate := '01-10-2023'; vStrYear := '01-04-2024'; vDate := StringToDateTime('dd/mm/yyyy',vStrDate); vYear := StringToDateTime('dd/mm/yyyy',vStrYear); vBetwix := YearsBetween(vDate, vYear); LogInfo(IntToStr(vBetwix)); LogInfo(''); //Result is 0 whole years - 2023 is NOT a leap year vStrDate := '01-01-2023'; vStrYear := '31-12-2023'; vDate := StringToDateTime('dd/mm/yyyy',vStrDate); vYear := StringToDateTime('dd/mm/yyyy',vStrYear); vBetwix := YearsBetween(vDate, vYear); LogInfo(IntToStr(vBetwix)); LogInfo(''); //Result is 0 whole years - 2024 is a leap year vStrDate := '01-01-2024'; vStrYear := '31-12-2024'; vDate := StringToDateTime('dd/mm/yyyy',vStrDate); vYear := StringToDateTime('dd/mm/yyyy',vStrYear); vBetwix := YearsBetween(vDate, vYear); LogInfo(IntToStr(vBetwix)); LogInfo(''); //Result is 1 whole year vStrDate := '01-01-2024'; vStrYear := '01-01-2025'; vDate := StringToDateTime('dd/mm/yyyy',vStrDate); vYear := StringToDateTime('dd/mm/yyyy',vStrYear); vBetwix := YearsBetween(vDate, vYear); LogInfo(IntToStr(vBetwix)); LogInfo(''); //Result is 1 whole year vStrDate := '01-01-2023'; vStrYear := '02-01-2024'; vDate := StringToDateTime('dd/mm/yyyy',vStrDate); vYear := StringToDateTime('dd/mm/yyyy',vStrYear); vBetwix := YearsBetween(vDate, vYear); LogInfo(IntToStr(vBetwix)); LogInfo(''); //Result is 4 whole years vStrDate := '01-01-2023'; vStrYear := '02-01-2027'; vDate := StringToDateTime('dd/mm/yyyy',vStrDate); vYear := StringToDateTime('dd/mm/yyyy',vStrYear); vBetwix := YearsBetween(vDate, vYear); LogInfo(IntToStr(vBetwix)); LogInfo('');end;