After-Hours Trading on Holidays and Weekends
Is after-hours trading open on holidays or weekends? What runs on a 1:00 p.m. early close, why Saturday is dark, and how to check any date yourself.
After-hours trading does not run on a full market holiday. When the NYSE and Nasdaq are shut for the day, the pre-market and post-market sessions are shut with them, and the overnight venues stay dark as well. On an early close day the regular session ends at 1:00 p.m. ET and a shortened evening window follows it, with the exact cutoff set by your broker rather than by one market-wide rule. Weekends are simpler: the overnight week stops Friday morning and restarts Sunday evening, so Saturday is genuinely dark.
Does after-hours trading run on a market holiday?
No. A full closure covers every session of the day. The 9:30 a.m. to 4:00 p.m. core is closed, and so are the extended windows on either side of it. The cleanest way to see that is to count one-minute bars, since a minute bar exists only when something actually traded in that minute. The panel below counts SPY minute bars in each ET clock hour across three consecutive days in November 2025: an ordinary Wednesday, the Thanksgiving holiday, and the half-day Friday that followed it.
| et_hour | normal_wednesday_bars | holiday_thursday_bars | half_day_friday_bars |
|---|---|---|---|
| 04:00 | 50 | 0 | 54 |
| 05:00 | 57 | 0 | 46 |
| 06:00 | 56 | 0 | 42 |
| 07:00 | 60 | 0 | 55 |
| 08:00 | 60 | 0 | 60 |
| 09:00 | 60 | 0 | 60 |
| 10:00 | 60 | 0 | 60 |
| 11:00 | 60 | 0 | 60 |
| 12:00 | 60 | 0 | 60 |
| 13:00 | 60 | 0 | 1 |
| 14:00 | 60 | 0 | 0 |
| 15:00 | 60 | 0 | 0 |
| 16:00 | 59 | 0 | 49 |
| 17:00 | 52 | 0 | 0 |
| 18:00 | 51 | 0 | 0 |
The exact SQL behind every number
SELECT
formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:00') AS et_hour,
countIf(toDate(toTimeZone(window_start, 'America/New_York')) = '2025-11-26') AS normal_wednesday_bars,
countIf(toDate(toTimeZone(window_start, 'America/New_York')) = '2025-11-27') AS holiday_thursday_bars,
countIf(toDate(toTimeZone(window_start, 'America/New_York')) = '2025-11-28') AS half_day_friday_bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2025-11-26 00:00:00'
AND window_start < '2025-11-29 06:00:00'
AND toDate(toTimeZone(window_start, 'America/New_York')) IN ('2025-11-26', '2025-11-27', '2025-11-28')
GROUP BY et_hour
ORDER BY et_hourRead the three columns side by side. At 12:00 ET the ordinary Wednesday carried 60 minute bars and the half-day Friday carried 60, while the holiday column shows 0. The holiday column holds that same value in the first hour on the panel, 04:00 ET, and in the last one, 18:00 ET. No pre-market bars, no regular session, no post-market bars, and nothing in the hours between them.
Your broker's app will still show a price for SPY on Thanksgiving. That number is the last print from the previous session, held on the screen until trading resumes. The mechanics of the two sessions that do run on a normal weekday are covered in after-hours and pre-market trading.
What happens to after-hours trading on a 1:00 p.m. early close?
An early close is a real trading day, only a short one: the regular session ends at 1:00 p.m. ET instead of 4:00 p.m. The question worth asking is what happens to the hours on either side. The pre-market window is unchanged, since it is anchored to the 9:30 a.m. open, which does not move. The evening is where firms differ.
| session_date | weekday | first_print_et_minute | last_print_et_minute | last_print_et |
|---|---|---|---|---|
| 2025-11-24 | Mon | 240 | 1199 | 19:59 |
| 2025-11-25 | Tue | 240 | 1199 | 19:59 |
| 2025-11-26 | Wed | 240 | 1139 | 18:59 |
| 2025-11-27 | Thu | 0 | 0 | no trading |
| 2025-11-28 | Fri | 240 | 1019 | 16:59 |
| 2025-11-29 | Sat | 0 | 0 | no trading |
| 2025-11-30 | Sun | 0 | 0 | no trading |
| 2025-12-01 | Mon | 240 | 1199 | 19:59 |
| 2025-12-02 | Tue | 240 | 1199 | 19:59 |
| 2025-12-03 | Wed | 240 | 1199 | 19:59 |
| 2025-12-04 | Thu | 240 | 1199 | 19:59 |
| 2025-12-05 | Fri | 240 | 1139 | 18:59 |
The exact SQL behind every number
SELECT
toString(cal.day) AS session_date,
formatDateTime(cal.day, '%a') AS weekday,
toUInt32(ifNull(t.first_minute, 0)) AS first_print_et_minute,
toUInt32(ifNull(t.last_minute, 0)) AS last_print_et_minute,
if(last_print_et_minute = 0,
'no trading',
concat(leftPad(toString(intDiv(last_print_et_minute, 60)), 2, '0'), ':',
leftPad(toString(modulo(last_print_et_minute, 60)), 2, '0'))) AS last_print_et
FROM
(
SELECT toDate('2025-11-24') + arrayJoin(range(12)) AS day
) AS cal
LEFT JOIN
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
min(toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) AS first_minute,
max(toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) AS last_minute
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2025-11-24 00:00:00'
AND window_start < '2025-12-06 06:00:00'
GROUP BY d
) AS t ON t.d = cal.day
ORDER BY cal.dayThe panel walks a fixed twelve-day stretch and reports, for every calendar day in it, the clock time of the first and the last SPY minute bar, measured in minutes past ET midnight. The ordinary Wednesday, 2025-11-26, printed its final bar at 18:59 ET. The half-day Friday, 2025-11-28, printed its final bar at 16:59 ET. The holiday Thursday and both weekend days carry the same label in that column: no trading.
That is the tape. The window your own account can send orders into is a separate question, and published broker schedules disagree. As of September 2026:
- Fidelity's stock market hours page lists Nasdaq pre-market trading from 4:00 a.m. to 9:30 a.m. ET and a late trading session from 4:00 p.m. to 8:00 p.m. ET, and names the two scheduled 1:00 p.m. closes for 2026, the day after Thanksgiving and Christmas Eve.
- Webull's 2026 after-hours guide states that on early-close days regular trading ends at 1:00 p.m. ET and extended-hours trading ends at 5:00 p.m. ET.
Those two figures answer different questions. The 8:00 p.m. cutoff is an ordinary full-day evening; the 5:00 p.m. cutoff is one firm's half-day evening. A third broker may publish a different hour again, and these schedules get revised without much fanfare. Check the schedule your own broker publishes for the specific date before leaving a limit order resting into the evening. Which dates carry the 1:00 p.m. close is covered in stock market holidays and early closes.
Is there any trading on Saturday or Sunday?
Not at any venue a retail account can reach. The weekday-by-weekday count makes the shape obvious.
| weekday | avg_minute_bars | days_with_any_trading | days_counted |
|---|---|---|---|
| Mon | 783.2 | 15 | 17 |
| Tue | 895.6 | 18 | 18 |
| Wed | 900.8 | 18 | 18 |
| Thu | 894.8 | 18 | 18 |
| Fri | 782.6 | 16 | 18 |
| Sat | 0 | 0 | 18 |
| Sun | 0 | 0 | 17 |
The exact SQL behind every number
SELECT
formatDateTime(cal.day, '%a') AS weekday,
round(avg(ifNull(t.bars, 0)), 1) AS avg_minute_bars,
countIf(ifNull(t.bars, 0) > 0) AS days_with_any_trading,
count() AS days_counted
FROM
(
SELECT today() - 126 + arrayJoin(range(126)) AS day
) AS cal
LEFT JOIN
(
SELECT
toDate(toTimeZone(window_start, 'America/New_York')) AS d,
count() AS bars
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= today() - 130
GROUP BY d
) AS t ON t.d = cal.day
WHERE cal.day <= today() - 3
GROUP BY weekday, toDayOfWeek(cal.day)
ORDER BY toDayOfWeek(cal.day)Over the trailing four months, Mon averaged 783.2 minute bars per calendar day. Sat averaged 0 across 18 of them, with 0 showing any trading at all, and Sun matched it at 0. Weekday averages land below a full tape's worth of minutes, since the window contains a holiday and an early close, and both average in as an empty or short day.
The overnight sessions that brokers advertise as 24 hour trading route to an alternative trading system rather than to an exchange. Blue Ocean ATS, the venue behind most retail overnight order flow, runs from 8:00 p.m. to 4:00 a.m. ET on Sunday through Thursday nights. There is no Friday night block: a trade struck on Friday evening would need reporting to a facility that does not operate on Saturday, and the week's final overnight session instead ends at 4:00 a.m. ET on Friday. The next one opens Sunday at 8:00 p.m. ET. Saturday sits in the middle of that gap with nothing open at either end. Trading US stocks 24 hours a day walks through how the overnight book works.
A price on your screen at noon on Saturday is a stale print. Nothing can execute against it, and the bid and offer beside it are the last ones quoted before the venue closed.
Does the longer trading week change any of this?
US exchange operators are moving toward a longer weekday. The SEC approved Nasdaq's proposal to expand its trading hours in 2026, and a near round-the-clock weekday session is scheduled to begin in December 2026, subject to the clearing and market-data plumbing being ready. Scheduled is the operative word, and start dates in this area have moved before. What none of the approved plans adds is a weekend. A 23 hour weekday still leaves a daily maintenance break, and it still stops on Friday evening and restarts on Sunday evening. The 23/5 US stock trading timeline follows the filings and the dates as they firm up.
How do I check whether a given day trades?
Rather than memorising a calendar, read the date off the exchange schedule. The panel below refreshes on its own: each closure drops off as it passes.
| holiday_date | closure_label | weekday | holiday | day_status | regular_close_et | days_away |
|---|---|---|---|---|---|---|
| 2026-11-26 | November 26 | Thu | Thanksgiving | closed | 65 | |
| 2026-11-27 | November 27 | Fri | Thanksgiving | early-close | 01:00 PM | 66 |
| 2026-12-24 | December 24 | Thu | Christmas | early-close | 01:00 PM | 93 |
| 2026-12-25 | December 25 | Fri | Christmas | closed | 94 | |
| 2027-01-01 | January 1 | Fri | New Years Day | closed | 101 | |
| 2027-01-18 | January 18 | Mon | Martin Luther King, Jr. Day | closed | 118 | |
| 2027-02-15 | February 15 | Mon | Washington's Birthday | closed | 146 | |
| 2027-03-26 | March 26 | Fri | Good Friday | closed | 185 | |
| 2027-05-31 | May 31 | Mon | Memorial Day | closed | 251 | |
| 2027-06-18 | June 18 | Fri | Juneteenth | closed | 269 | |
| 2027-07-05 | July 5 | Mon | Independence Day | closed | 286 | |
| 2027-09-06 | September 6 | Mon | Labor Day | closed | 349 |
The exact SQL behind every number
SELECT
toString(date) AS holiday_date,
concat(monthName(date), ' ', toString(toDayOfMonth(date))) AS closure_label,
formatDateTime(date, '%a') AS weekday,
any(name) AS holiday,
any(status) AS day_status,
any(if(status = 'early-close',
formatDateTime(toTimeZone(close, 'America/New_York'), '%I:%i %p'),
'')) AS regular_close_et,
dateDiff('day', today(), date) AS days_away
FROM global_markets.stocks_market_holidays
WHERE date >= today()
GROUP BY date
ORDER BY dateThe next closure on the exchange calendar is Thanksgiving on November 26, 65 days out, and the forward calendar carries 12 dated closures in total. For the evening session, the status column is the one that matters. A full closure means no extended hours at all, at any hour of that day. An early close means a shortened afternoon whose end time your broker sets, with the pre-market that morning running normally. For a plain yes or no on the current date, is the stock market open today answers the single question.
FAQ
Is after-hours trading open on Thanksgiving or Christmas Day?
No. On a full market holiday the pre-market, the regular session and the post-market are all closed, and the overnight venues do not run that night either. Trading resumes at the next scheduled session, which after Thanksgiving is a shortened Friday.
Does after-hours trading close early on a half day?
Usually, though the cutoff belongs to your broker. Webull publishes a 5:00 p.m. ET extended-hours end on early-close days against an 8:00 p.m. ET end on ordinary days, and other firms publish other hours. Check the schedule for the date on your own platform.
Can you trade stocks on Saturday or Sunday?
No. The overnight venue behind most retail 24 hour trading runs Sunday through Thursday nights, 8:00 p.m. to 4:00 a.m. ET. Sunday evening opens the trading week and Friday morning closes it, which leaves Saturday with no session at any hour.
Why does my broker show a live-looking price when the market is closed?
The quote is the last print carried forward from the previous session. Nothing can execute against it while every venue is closed, and the first trade of the next session can open away from that level.
Do pre-market hours change on an early close day?
No. The pre-market window is anchored to the 9:30 a.m. ET open, which stays put on a half day. Only the afternoon is cut short.
Every panel above ships with the SQL that produced it, expandable underneath the table. To check whether a specific date traded, or when its last print landed, ask the question in plain English on the Strasmore terminal.