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

# MonthSpan

The **MonthSpan** function returns the approximate number of months between two specified **TDateTime** values, including any fraction of a month.

Because months are not all the same length, **MonthSpan** returns an approximation based on an assumption of 30.4375 days per month.

But unlike its sister function **MonthsBetween**, the **MonthSpan** function reports incomplete months as a fraction of the entire 30.4375-day month.

The ordering of the two dates doesn't matter - the number of months will not be a negative value.

**Declaration**: function MonthSpan(const ANow, AThen: TDateTime): Double;

The following example shows several scenarios.

```pascal
procedure OnMapEvent(var Value:Variant);
var
  vYearT, vDate : TDateTime;
  vStrYear, vStrDate : string;
  vBetwix : double;
begin
 //Result is 1.01848049281314 of a month - run-date to run-date plus 1 month
 //Where run-date is 03-12-2023 plus 31 days (31/30.4375 = 1.01848049281314
  vBetwix := MonthSpan(Date, IncMonth(Date, 1));
  LogInfo(FloatToStr(vBetwix));

 //Result is 3.31827515400411 months - 101 days
  vBetwix := MonthSpan(Date, IncDay(Date, 101));
  LogInfo(FloatToStr(vBetwix));

 //Result is 26.9733059548255 months - 821 days
  vBetwix := MonthSpan(Date, IncMonth(Date, 27));
  LogInfo(FloatToStr(vBetwix));

 //Result is 6.0123203285421 months - 183 days
  vStrDate := '01-10-2023';
  vStrYear := '01-04-2024';
  vDate := StringToDateTime('dd/mm/yyyy',vStrDate);
  vYearT := StringToDateTime('dd/mm/yyyy',vStrYear);
  vBetwix := MonthSpan(vDate, vYearT);
  LogInfo(FloatToStr(vBetwix));

 //Result is 11.958932238193 months - 364 days
  vStrDate := '01-01-2023';
  vStrYear := '31-12-2023';
  vDate := StringToDateTime('dd/mm/yyyy',vStrDate);
  vYearT := StringToDateTime('dd/mm/yyyy',vStrYear);
  vBetwix := MonthSpan(vDate, vYearT);
  LogInfo(FloatToStr(vBetwix));

 //Result is 12.0246406570842 months - 366 days
  vStrDate := '01-01-2024';
  vStrYear := '01-01-2025';
  vDate := StringToDateTime('dd/mm/yyyy',vStrDate);
  vYearT := StringToDateTime('dd/mm/yyyy',vStrYear);
  vBetwix := MonthSpan(vDate, vYearT);
  LogInfo(FloatToStr(vBetwix));

 //Result is 12.7802874743326 months - 389 days
  vStrDate := '01-01-2023';
  vStrYear := '25-01-2024';
  vDate := StringToDateTime('dd/mm/yyyy',vStrDate);
  vYearT := StringToDateTime('dd/mm/yyyy',vStrYear);
  vBetwix := MonthSpan(vDate, vYearT);
  LogInfo(FloatToStr(vBetwix));

 //Result is 50.7268993839836 months - 1544 days
  vStrDate := '01-01-2023';
  vStrYear := '25-03-2027';
  vDate := StringToDateTime('dd/mm/yyyy',vStrDate);
  vYearT := StringToDateTime('dd/mm/yyyy',vStrYear);
  vBetwix := MonthSpan(vDate, vYearT);
  LogInfo(FloatToStr(vBetwix));

 //Result is 0.788501026694045 months - 24 days
  vStrDate := '01-01-2023';
  vStrYear := '25-01-2023';
  vDate := StringToDateTime('dd/mm/yyyy',vStrDate);
  vYearT := StringToDateTime('dd/mm/yyyy',vStrYear);
  vBetwix := MonthSpan(vDate, vYearT);
  LogInfo(FloatToStr(vBetwix));

end;
```
