# yearfrac

Fraction of year between dates

## Syntax

``YearFraction = yearfrac(StartDate,EndDate,Basis)``

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