Documentation

yearfrac

Fraction of year between dates

Syntax

YearFraction = yearfrac(StartDate, EndDate, Basis)

Arguments

StartDate

Enter as serial date numbers, date character vectors, or datetime arrays.

EndDate

Enter as serial date numbers, date character vectors, or datetime arrays.

Basis

(Optional) Day-count basis of the instrument. A vector of integers.

  • 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

For more information, see basis.

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

Description

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. Note, 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, Fraction is negative.

Definitions

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

Examples

collapse all

Compute yearfrac When the Calendar Year After the StartDate is Not a Leap Year

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

Compute yearfrac When the Calendar Year After the StartDate is a Leap Year

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.

Compute the Fraction of a Year Using an actual/actual Basis

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.

Compute yearfrac When Specifying datetime Arrays

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

Related Examples

Introduced before R2006a

Was this topic helpful?