yearfrac

Fraction of year between dates

Description

example

YearFraction = yearfrac(StartDate,EndDate,Basis) returns a fraction, in years, based on the number of days between dates StartDate and EndDate using the given day-count Basis.

The number of days in a year (365 or 366) is equal to the number of days in the calendar year after the StartDate. If EndDate is earlier than StartDate, YearFraction is negative.

All specified arguments must be number of instruments (NUMINST-by-1) or (1-by-NUMINST) conforming vectors or scalar arguments.

Examples

collapse all

Given a Basis of 0 and a Basis of 1, compute yearfrac.

Define the StartDate and EndDate using a Basis of 0.

YearFraction = yearfrac('14 mar 01', '14 sep 01', 0)
YearFraction = 0.5041

Define the StartDate and EndDate using a Basis of 1.

YearFraction = yearfrac('14 mar 01', '14 sep 01', 1)
YearFraction = 0.5000

Given a Basis of 0, compute yearfrac when the calendar after StartDate is in a leap year.

Define the StartDate and EndDate using a Basis of 0.

yearFraction = yearfrac(' 14 mar 03', '14 sep 03', 0)
yearFraction = 0.5027

There are 184 days between March 14 and September 14, and the calendar year after the StartDate is a leap year, so yearfrac returns 184/366 = 0.5027.

To get the fraction of a year between '31-Jul-2015' and '30-Sep-2015' using the actual/actual basis:

yearfrac('31-Jul-2015', '30-Sep-2015', 0)*2
ans = 0.3333

For the actual/actual basis, the fraction of a year is calculated as:

(Actual Days between Start Date and End Date)/(Actual Days between Start Date and exactly one year after Start Date)

There are 61 days between 31-Jul-2015 and 30-Sep-2015. Since the next year is a leap year, there are 366 days between 31-Jul-2015 and 31-Jul-2016. So, there is 61/366 which is exactly 1/6. So given this, exactly 2/6 is the expected result for the fraction of the six-month period.

Use a Basis of 12 to compute yearfrac when parts of the date range are in leap year and in a non-leap year. The output YearFraction is a fraction, in years, based on the number of days between the StartDate and EndDate.

YearFraction = yearfrac('1-Jan-2016','30-Jan-2017',12)
YearFraction = 1.0795

Given a Basis of 9, compute yearfrac when the StartDate and EndDate are specified using datetime arrays.

yearfrac(datetime('1-Jan-2000','Locale','en_US'), '1/1/2001', 9)
ans = 1.0167

Input Arguments

collapse all

Start date, specified as an N-by-1 or 1-by-N vector using serial date numbers, date character vectors, or datetime arrays.

Data Types: double | char | datetime

End date, specified as an N-by-1 or 1-by-N vector using serial date numbers, date character vectors, or datetime arrays.

Data Types: double | char | datetime

Day-count basis for each set of dates, specified as an N-by-1 or 1-by-N vector of integers with values of 0 through 13.

• 0 = actual/actual (default)

• 1 = 30/360 (SIA)

• 2 = actual/360

• 3 = actual/365

• 4 = 30/360 (BMA)

• 5 = 30/360 (ISDA)

• 6 = 30/360 (European)

• 7 = actual/365 (Japanese)

• 8 = actual/actual (ICMA)

• 9 = actual/360 (ICMA)

• 10 = actual/365 (ICMA)

• 11 = 30/360E (ICMA)

• 12 = actual/365 (ISDA)

• 13 = BUS/252

Data Types: single | double

Output Arguments

collapse all

Real numbers identifying the interval, in years, between StartDate and EndDate, returned an N-by-1 or 1-by-N vector.

collapse all

Difference Between yearfrac and date2time

The difference between yearfrac and date2time is that date2time counts full periods as a whole integer, even if the number of actual days in the periods are different. yearfrac does not count full periods.

For example,

yearfrac('1/1/2000', '1/1/2001', 9)

ans =

1.0167

yearfrac for Basis 9 (ACT/360 ICMA) calculates 366/360 = 1.0167. So, even if the dates have the same month and date, with a difference of 1 in the year, the returned value may not be exactly 1. On the other hand, date2time calculates one full year period:

date2time('1/1/2000', '1/1/2001', 1, 9)

ans =

1