---
url: >-
  /statelake/scripting-reference/functions-and-procedures/datetime-functions/yearsbetween.md
---

# 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.

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