 DateRange ( startDate ; finishDate ; returnType )

Calculate the number of days "d", months "m" or years "y" between two dates     Average rating: 4.3 (32 votes) Log in to vote Michael Richards itraining http://www.itraining.com.au
Sample input:
DateRange ( 1/1/2007 ; 31/12/2007 ; "d" )
DateRange ( 1/1/2007 ; 31/12/2007 ; "m" )
DateRange ( 1/1/2007 ; 31/12/2007 ; "y" )

/*
dates shown are in Australian format d/m/yyyy
*/
Sample output:
365
12
1

Function definition: (Copy & paste into FileMaker's Edit Custom Function window)

NOTES:
In a nutshell , the LET statement prepares and calculates all required variables.

The "availableDates" variable decides if both the startDate and finishDate fields supplied are available and valid.
Alternatively, only the startDate is available and valid so a date range can be calculated from the current date.

The "days" variable calculates the number of days between the two date fields.
Alternatively, the current date is used if the only the startDate field is available and valid.

The "months" variable approximates the number of months between the two date fields using the "days" calculation.
Similarly, "years" variable approximates the number of years between the two date fields using the "days" calculation.

Finally the "returnType" parameter is entered as either "d", "m" or "y" which returns the number of days, months (approximate) or years (approximate) respectively.

Probably should trap for startDate < finishDate in the LET function as well. You can do that bit. Fabio, ItalyJun 26, 2017 There is a problem when return 3 years in months. i.e. Let ( [ ~startDate = Date ( 7; 1; 2017 ); ~endDate = Date ( 6; 30; 2020 ); ~result = round ( ( ~endDate - ~startDate ) / 30; 0 ) ]; ~result //37 wrong result! ) round ( ( ~endDate - ~startDate ) / 30; 0 ) should be: round ( ( ~endDate - ~startDate ) / 30.42; 0 )