Overview
Day count conventions are used to calculate time between two dates as a days or a year fraction.
Multiple approaches exist to calculate this fraction:
- the actual year group assumes that a year contains either 365 or 366 days, depending on the convention, leap days are treated differently. For date intervals spanning multiple years, the way that this is broken down in years and days varies.
- the standard year group assumes one year to consist of 12 months, 52 weeks, etc. The consequence is that all months are considered to have 30 days, resulting in a 360 day year. As in real life months can have either 28, 29, 30 or 31 days, conventions have rules to treat end-of-month (EOM) situations.
- the hybrid group mixes elements of the two previous approaches, using the numerator from one group and the denominator from the other group.
Example: calculate the fraction between January 1st, 2026 and July 1st, 2026:
- actual: there are 181 days between the two dates, and the year 2026 has 365 days, so the actual days fraction is 181/365. Note: for July 1st to January 1st, 2027, this would be 184/365.
- 30/360: there are 6 months between the two dates, so the days fraction becomes 180/360.
- hybrid: mixing the two methods, the days fraction could be 181/360 using the Act/360 method, or 180/365 using the 30/365 method.
Actual based day counts differ in how they handle leap days
Actual based day counts use the actual number of days as the numerator and the number of days in the year as the denominator. They differ in how they treat leap days and leap years.
| Method | Numerator | Denominator |
|---|---|---|
| Act/365 Fixed | actual days | always 365 |
| Act/365 No Leap | actual days minus leap days | always 365 |
| Act/365 Leap | actual days | use 366 if coupon payment falls in a leap year, otherwise use 365 |
| Act/Act ISDA | actual days | use 366 for days that fall in a leap year, use 365 for days that fall in a normal year |
| Act/Act AFB | actual days | count back full years, then use 365 or 366 depending on whether a leap day falls in the coupon period |
| Act/Act ICMA | actual days | periods are defined using a reference date, actual days in the period multiplied by period frequency |
30/360 based day counts differ in how they patch end-of-month dates
1. The compression problem
While actual based day counts try to capture the length of a period in actual days, the 30/360 family tries to make every month behave as if it has exactly 30 days, resulting in the following formula:
- ((Y2 - Y1) * 360 + (M2 - M1) * 30 + (D2 - D1)) / 360
Example: A bond with a coupon schedule anchored to the last day of the month — say a semi-annual bond paying on August 31st 2025 and February 28th, 2026 — should produce exactly the same coupon amount for every period. If both August 31st and February 28th are left as-is, the period from August 31st to February 28th counts as:
- (2026 - 2025) * 360 + (2 - 8) * 30 + (28 - 31) = 360 - 180 - 3 = 177
Counting from February 28th, 2026 to August 31st, 2026 this becomes:
- (2026 - 2026) * 360 + (8 - 2) * 30 + (31 - 28) = 0 + 180 + 3 = 183
Example: applying the rules from 30E3/360, the 31st is adjusted downward to 30 because it is 1 day too long. February 28th (or 29th) is adjusted upward to 30 because it is too short. Both adjustments serve the goal of forcing 30 day months, they just approach it from opposite directions. After these changes, both periods have the same length:
- (2026 - 2025) * 360 + (2 - 8) * 30 + (30 - 30) = 360 - 180 + 0 = 180
- (2026 - 2026) * 360 + (8 - 2) * 30 + (30 - 30) = 0 + 180 + 0 = 180
2. The patch strategy
Each convention chooses which dates to patch — only the 31st, all EOM including February, or more nuanced or aggressive rules...
| Method | What is changed? | How is it changed? |
|---|---|---|
| 30/360 ICMA | start & end: 31st | change 31st to 30th |
| 30/360 ISDA | start: 31st end: 31st |
change start to 30th change end to 30th only if start ≥ 30th |
| 30E/360 | start: 31st + Feb EOM end: 31st end: Feb EOM |
change start to 30th change end to 30th change end to 30 unless Feb EOM is maturity |
| 30E2/360 | start & end: 31st start & end: Feb EOM |
change 31st to 30th adjust Feb EOM to match a higher value for the opposite period boundary |
| 30E3/360 | start & end: 31st + Feb EOM | change all 31st and Feb EOM to 30th |
| 30E+/360 | start: 31st end: last day of month |
change start to 30th change end to 1st of next month |
| 30/360 US Bond | start: 31st end: 31st |
change start 31st to 30th if start is before 30th, change end to 1st of next month else change end to 30th |
| 30/360 SIA | start: 31st + Feb EOM end: 31st + Feb EOM |
change start 31st and Feb EOM to 30th change end Feb EOM to 30th only if start was Feb EOM change end 31st to 30th if start is 30th after previous steps |
| 30/360 Italian | start & end: 31st + Feb > 27th | change all 31st to 30th change all Feb 28th and Feb 29th to 30th |
30E/360 and 30E3/360 Notes
30E3/360 is a variation of 30E/360 method where the last day of February is always assumed to be the 30th, even if it is the last day of the maturity coupon period.
30E/360 does not change February 28th or 29th when it is the last day of the maturity coupon period.
To make these two methods behave differently, our implementation of 30E/360 does not change the last day of February when it is the last day of a date interval, whereas 30E3/360 does change it.
3. The cliff effect
Every patch has an edge: the day just before or after the patched date behaves normally, creating a cliff.
Because the patch only fires on specific dates (e.g. the 31st or the last day of February), the day immediately before the patch and the day immediately after it are both unpatched. This means a single calendar day can correspond to more than one day of accrued interest — or fewer — depending on which side of the cliff you land on.
Example: changing the end date
| From -> To | Actual days | 30/360 ICMA days |
|---|---|---|
| Jan 27 -> Feb 26 | 30 | 29 |
| Jan 27 -> Feb 27 | 31 | 30 |
| Jan 27 -> Feb 28 | 32 | 31 |
| Jan 27 -> Mar 1 | 33 | 34 |
| Jan 27 -> Mar 2 | 34 | 35 |
Example: changing the start date
| From -> To | Actual days | 30/360 ICMA days |
|---|---|---|
| Jan 29 -> Mar 2 | 32 | 33 |
| Jan 30 -> Mar 2 | 31 | 32 |
| Jan 31 -> Mar 2 | 30 | 31 |
| Feb 1 -> Mar 2 | 29 | 29 |
| Feb 2 -> Mar 2 | 28 | 28 |
4. The 30/360 conventions are fit-for-purpose for bonds, they break down in general use!
Bonds have fixed, regular coupon schedules. The day count convention is only ever applied to:
- A full coupon period — which always returns exactly 1/frequency, regardless of which months it spans
- A partial period for accrued interest on a secondary market sale — which is always measured from the last coupon date to the settlement date, both of which are anchored to the coupon schedule
In both cases the EOM cliffs are either irrelevant (full periods) or bounded (partial periods stay within one coupon period, limiting exposure to at most one or two EOM boundaries).
Outside a bond context — loans, swaps with irregular schedules, general accrual calculations — the start and end dates are arbitrary. You can land anywhere relative to EOM boundaries, and the cliffs become:
- Unpredictable — small date changes produce outsized jumps
- Asymmetric — economically similar periods produce different year fractions
Conclusion
30/360 conventions are safe in two specific contexts: bond coupon accruals (anchored to coupon dates) and monthly modeling anchored to the 1st of the month.
For short consecutive periods with arbitrary dates, the EOM cliffs make them unsuitable — use an actual days based convention instead.
Hybrid day counts almost never get it right
Hybrid day counts borrow one element from each of the two main families. Using one method for the numerator and another for the denominator introduces a systematic bias.
A full year is never 1/1: in Actual/360 a year is either 365/360 or 366/360, while in 30/365 it is always 360/365.
| Method | Numerator | Denominator |
|---|---|---|
| 30/365 | 30/360 (basic rule) | always 365 |
| 30/Actual (ICMA) | 30/360 (basic rule) | periods are defined using a reference date, actual days in the period multiplied by period frequency |
| Actual/360 | actual days | always 360 |
| Actual/360 NL | actual days minus leap days | always 360 |
| Actual/364 | actual days | always 364 (matches week based intervals) |
Act/Act ICMA and 30/Act (ICMA): self-consistent vs self-contradicting
Actual/Actual ICMA
Act/Act ICMA (the ISDA bond convention) works by using the actual coupon period as the reference unit. The denominator is the number of days in the current coupon period multiplied by the coupon frequency.
For a semi-annual bond, a full coupon period always contributes exactly 1/2 of a year, regardless of whether that period has 181, 182, 183 or 184 days. Every full period is mathematically equal by construction.
For incomplete periods (the stub at the beginning or end of a bond's life), it applies the same logic consistently — actual days in the stub divided by actual days in the reference period times frequency. So the fraction is always measured relative to the same yardstick as the full periods.
This is mathematically coherent in a way that other conventions aren't:
- 30/360 achieves equal full periods but does so by distorting the day count itself, so the stub fractions are also distorted.
- Act/Act ISDA uses the actual calendar year as denominator, which means full coupon periods are not guaranteed to be equal (a semi-annual period can be slightly more or less than 0.5 depending on leap years).
- Act/365 Fixed and Act/360 have the systematic bias problem in full periods, the first occasionally calculating a full year as 366/365, the latter always returning 365/360 or 366/360.
So Act/Act ICMA is the only convention that simultaneously lets full periods be exactly equal and measures stub fractions consistently using real elapsed time as the numerator. The mathematical elegance is that it's self-referential in a clean way — the period defines its own yardstick.
30/Actual ICMA
This is a remarkable convention:
- the numerator is from the equal-periods camp: months are standardized to 30 days, so the elapsed "days" are smoothed and distorted relative to the real calendar.
- the denominator is ICMA-style: actual days in the coupon period times frequency, so the reference yardstick is grounded in real calendar time.
This combination is arguably inconsistent — measuring the numerator with a ruler that ignores reality, then dividing by a denominator that carefully respects it. The elegant self-referential quality of Act/Act ICMA (where numerator and denominator are measured with the same yardstick) is broken.
The practical consequence is that full coupon periods will generally not come out to exactly 1/frequency the way they do in Act/Act ICMA, because the 30-day month numerator will rarely match the actual days in the period. So it doesn't fully achieve the equal-periods goal of the 30/360 family either.
It is hard to identify a strong mathematical rationale for combining these two elements. It may have emerged from practical legacy reasons — perhaps a desire to smooth monthly accruals (hence the 30-day numerator) while anchoring the overall period fraction to something market-observable (the actual coupon period). From a pure mathematical coherence standpoint, it sits between two stools.
Reference dates and periods
Actual/Actual ICMA and 30/Actual (ICMA) both need reference dates and a frequency to be able to create a periods schedule.
To use them, select the Periods and days method, and set a reference date.
As the periods handle the periods fraction, the day count is only applied to the leading or trailing stub fractions, thus limiting the inconsistency of the 30/Actual convention.