I turned Fortnite's mid-season schedule into a tiny JSON dataset

2026-11-06来源 dev.toEnglish

Fortnite's Treasure Hunters mini-season (Nov–Dec 2026) has a lot of moving dates: Treasure Hours sessions, Captain's Days, collab skins landing in the Item Shop, and a hard deadline for activating the rare Pirate Shop Access reward. Epic announces them across a news post, a status account on X and in-game text, and it already moved the schedule once mid-season.

I wanted one place to read them from, so I put them in a small public repo: fortnite-treasure-hunters-2026.

What's in it

schedule.json holds the dates in UTC, and every entry links to where it came from:

{ "treasure_hours": [ { "name": "Fortune Treasure Hours (session 1)", "start": "2026-11-07T19:00:00Z", "end": "2026-11-07T21:00:00Z", "source": "https://x.com/FortniteStatus/status/2118114691876552891" } ], "captains_days": ["2026-11-01", "2026-11-08", "2026-11-12", "2026-11-15", "2026-11-22"], "pirate_shop_access": { "window_days": 14, "activate_2026_by": "2026-12-16T00:00:00Z" } } 

A detail that bit me: Epic writes times in Eastern Time, and the 2026 activation deadline is "Dec 15, 7 PM ET". Daylight saving is over by then (EST = UTC−5), so that is 00:00 UTC on Dec 16, which is why some sites say the 15th and others the 16th. Storing everything in UTC and converting only for display avoids that.

The helper

The interesting question for players is when to start the 14-day window, because the shop rotates and you can only claim what's in it while the window runs. So window.js has three pure functions:

export const WINDOW_DAYS = 14; const DAY = 86400e3; export function activationWindow(start) { return { start, end: start + WINDOW_DAYS * DAY }; } export function dropsInWindow(drops, start) { const { end } = activationWindow(start); return drops.filter((d) => d.at >= start && d.at < end).sort((a, b) => a.at - b.at); } export function latestFullStart(deadline) { return deadline - WINDOW_DAYS * DAY; } 

The tests double as documentation. For example, starting at the Nov 5, 7 PM ET shop update covers every collab announced so far:

test("that window covers A$AP Rocky through Cap'n Hatsune Miku", () => { const names = dropsInWindow(drops, Date.parse('2026-11-06T00:00:00Z')).map((d) => d.name); assert.equal(names[0], 'A$AP Rocky'); assert.equal(names.at(-1), "Cap'n Hatsune Miku"); }); 

No dependencies, node --test only, MIT.

Using it

If you'd rather not run code, the same data powers an activation planner on my fan site that shows the window in your own time zone.

PRs welcome when Epic announces new dates. That's the part that goes stale fastest.

Fan project, not affiliated with Epic Games.

原文:https://www.a8q9.cn/en/article/i-turned-fortnite-s-mid-season-schedule-into-a-tiny-json-dataset-34ace2.html

相关文章