Writes about payments timing and the banking calendar. Builds Banks Open Today.
Writes about payments timing and the banking calendar. Builds Banks Open Today.
Writes about payments timing and the banking calendar. Builds Banks Open Today.
Story's CredibilityWrites about payments timing and the banking calendar. Builds Banks Open Today.
A spec says "payouts arrive in one business day." Someone writes if weekday < 5 and date not in HOLIDAYS, and the support queue fills up after the next long weekend.
The check answers the wrong question. In the US, the date a payment lands depends on the rail, the time the file reaches the operator, and how the Federal Reserve treats a holiday that falls on a weekend. Here is how to encode those rules.
Three rails, three definitions of "today."
FedACH (batch). Under the published FedACH processing schedule, same-day eligible files have three deadline/settlement pairs (all ET): 10:30 a.m. → 1:00 p.m., 2:45 p.m. → 5:00 p.m., and 4:45 p.m. → 6:00 p.m. Everything else is future-dated and settles at 8:30 a.m. ET on the next eligible banking day. Nacha proposed a fourth same-day window aimed at the Pacific Time close of business, with a proposed effective date of September 19, 2026. The Federal Reserve Board's staff opposed it in a comment letter, and the Reserve Banks' published schedule still lists three same-day deadlines.
Fedwire Funds (real-time gross settlement, business days only). Each Fedwire funds-transfer business day opens the evening before, at 9:00 p.m. ET, and ends at 7:00 p.m. ET; core customer transfers must be in by 6:45 p.m. ET. Saturdays, Sundays, and Federal Reserve Bank holidays are not funds-transfer business days. A wire sent at 9:30 p.m. ET on Monday belongs to Tuesday's business day.
FedNow (instant, every day). The FedNow Service runs a 24-hour funds-transfer business day every day of the week, including weekends and Federal Reserve holidays. The business day rolls over at about 7:01 p.m. ET with no break in processing. A FedNow payment can settle on Christmas Day, but its business-day date still changes at about 7:01 p.m. ET, not midnight. It only helps when the institutions involved participate.
The takeaway for your data model: "settlement date" is a property of a payment on a rail, not of a calendar day.
The weekend-holiday rule that breaks naive code.
The Federal Reserve's holiday list (Board publication K.8, mirrored on FRBservices.org) has eleven holidays. Two rules govern weekends:
- Saturday holiday: no shift. The Reserve Banks operate normally on the preceding Friday.
- Sunday holiday: the closure moves to Monday.
Many general-purpose holiday calendars move a Saturday holiday to Friday. If your table came from one of them, it may mark Fridays as closed while the payment system is running.
The 2026 and 2027 schedules have plenty of these cases:
Holiday
Date
Weekday
Effect on Fed payment services
Independence Day
July 4, 2026
Saturday
Friday, July 3 is open
Juneteenth
June 19, 2027
Saturday
Friday, June 18 is open
Independence Day
July 4, 2027
Sunday
Monday, July 5 is closed
Christmas Day
December 25, 2027
Saturday
Friday, December 24 is open
New Year's Day
January 1, 2028
Saturday
Friday, December 31, 2027 is open
The FedACH holiday table backs this up. Its July 4, 2026 entry has processing running through 11:30 p.m. ET on Friday, July 3, which makes that Friday an ordinary processing day. K.8 adds that the Board of Governors, unlike the Reserve Banks, takes those Fridays off, so "Fed closed" is ambiguous.
Weekday holidays are simpler. Christmas 2026 is a Friday, creating a three-day gap: FedACH stops at 11:30 p.m. ET on December 24, 2026, and restarts on the evening of Sunday, December 27 (5:30 p.m. ET).
A Minimal Model
Store holidays as observed closure dates, already adjusted by the Fed's rule, and keep a calendar per rail:
This is deliberately incomplete. Your bank or processor likely sets earlier internal cutoffs, so treat the Fed times as upper bounds, and add the 6:45 p.m. ET customer-transfer check for wires.
Where the bank's calendar diverges from the Fed's.
The Fed calendar governs interbank settlement. It does not decide when a branch opens or when a receiving bank posts a credit, and those can differ. When debugging a "why didn't it arrive" ticket, separate the two quickly. For a human-readable check of whether US banks are closed on a particular date, a date-by-date view of US bank closures is useful next to the Fed's own K.8 table. Use it for triage and customer-facing copy; your production calendar should still come from the primary source.
Test cases worth hard-coding.
Each reflects a published Fed schedule entry:
- A standard ACH credit submitted Thursday, December 24, 2026, before the deadline: the next Fed business day is Monday, December 28.
fed_closed(2026-07-03)isFalse, because a Saturday holiday does not close Friday.fed_closed(2027-07-05)isTrue, because a Sunday holiday closes Monday.fed_closed(2027-12-31)isFalse, even though New Year's Day 2028 is the next day.- A Fedwire message timestamped 9:15 p.m. ET on Friday, November 26, 2027 maps to Monday, November 29, 2027, not Saturday.
- A FedNow payment at 8:00 p.m. ET on any date carries the next calendar day's business-day date.
A short checklist for shipping.
- Store UTC, but evaluate cutoffs in
America/New_York; hard-coded offsets break at DST changes. - Model calendars per rail: ACH, wire, and instant each get their own.
- Refresh holidays from K.8, which covers 2026 through 2030 and was last amended in July 2026.
- Show a date range, not one promised date, when the rail or receiving bank is uncertain.
- Document which "business day" your copy means, so support and engineering agree.
Treat "business day" as a function of rail, timestamp, and calendar, not a single boolean.
About Author
Writes about payments timing and the banking calendar. Builds Banks Open Today.

