You're scrolling through your ChatGPT history. Everything looks normal — until you notice the timestamps. Here's the thing — yesterday's conversation says "23 hours ago. " The one before that? Also "23 hours ago." And the one from three days ago? You guessed it. Still "23 hours ago.
Your first thought: *Is my account broken? Now, did I lose data? Is this a privacy thing?
Take a breath. You're not alone, and no — your history isn't gone.
What Is the "23 Hours Ago" Bug
This is a known display issue in ChatGPT's web interface where multiple conversations — sometimes spanning days — all show the same relative timestamp: "23 hours ago." It's not a timezone error. It's not a data loss event. It's a frontend rendering bug that's been popping up intermittently since late 2023 Worth keeping that in mind..
The conversations themselves? Still there. Stored correctly on OpenAI's backend. Which means the actual timestamps? The problem is purely in how the UI calculates and displays "time ago" labels Worth knowing..
Why "23 hours" specifically
Good question. The number isn't random.
Most "time ago" libraries work by bucketing timestamps into relative ranges: seconds, minutes, hours, days. Now, when a timestamp falls into a weird edge case — say, a daylight saving transition, a server clock skew, or a malformed ISO string — the fallback logic sometimes defaults to a fixed value. In ChatGPT's case, that fallback appears to be 23 hours.
It's essentially the UI saying: "I don't know when this happened, but here's a number that looks plausible."
Why It Matters / Why People Care
At first glance, it's cosmetic. But if you rely on ChatGPT history for work — coding sessions, research threads, client drafts — this bug creates real friction Simple as that..
You can't trust the sort order
ChatGPT sorts conversations by updated_at on the backend. That part works. But when the UI labels five different chats "23 hours ago," your brain stops trusting the list. You start opening each one just to verify which is actually recent.
It breaks mental models
We use relative time as a shortcut. "3 days ago" means another. "Yesterday" means one thing. When that signal flattens, you lose the ability to scan. You're forced to read every title, every snippet — defeating the purpose of a history sidebar Turns out it matters..
No fluff here — just what actually works Most people skip this — try not to..
It triggers unnecessary support tickets
Users file bug reports. They tweet at OpenAI. On the flip side, they wonder if they've been hacked. All because a timestamp label is stuck on a loop.
How It Works (and Why It Breaks)
Let's look under the hood — without needing a CS degree.
The timestamp pipeline
- Backend stores UTC — Every message gets an ISO 8601 timestamp:
2024-11-15T14:32:07.123Z - API returns raw timestamps — The conversation list endpoint sends these unchanged
- Frontend computes "time ago" — A JavaScript function runs:
now - timestamp → human readable
Where it fails
The bug lives in step 3.
Most relative-time libraries (like date-fns, dayjs, or custom code) handle the math fine — if the input is valid. But three things can poison the input:
| Cause | What happens |
|---|---|
| Malformed ISO string | new Date("2024-11-15T14:32:07") parses as local time, not UTC |
| Clock skew | Your browser's Date.now() differs from server time by hours |
| DST transition | The "missing hour" or "repeated hour" confuses diff logic |
And yeah — that's actually more nuanced than it sounds.
Any of these can push the calculated diff into a bucket the formatter doesn't expect — so it falls back to a hardcoded "23 hours."
It's not just you — it's the stack
ChatGPT's frontend is a React app. The sidebar is a virtualized list. Each conversation item gets its own formatDistanceToNow() call. If one item has a bad timestamp, it doesn't break the others. But if a batch of conversations share a bad timestamp pattern — say, all imported from a migration, or all created during a specific deploy — they'll all show the same wrong label Simple, but easy to overlook..
That's why you see clusters of "23 hours ago" instead of random wrong times.
Common Mistakes / What Most People Get Wrong
"Clearing cache fixes it"
Nope. Plus, this isn't a cached asset issue. The timestamp calculation runs fresh on every render. Hard refresh, incognito, different browser — same result.
"It's my timezone setting"
ChatGPT doesn't have a user-facing timezone setting. It uses your browser's Intl.DateTimeFormat().Here's the thing — resolvedOptions(). Still, timeZone. If that were wrong, all timestamps would be off by a consistent offset — not frozen at 23 hours Worth knowing..
"My conversations are deleted"
The most common panic. But click into any "23 hours ago" chat. But the messages load. The context works. Practically speaking, the data is intact. Only the label is lying.
"It only happens on free tier"
False. Reports come from Plus, Team, and Enterprise users alike. It's a frontend bug, not a plan limitation.
Practical Tips / What Actually Works
1. Hover for the real timestamp
On desktop, hover over "23 hours ago" in the sidebar. Consider this: a tooltip appears with the exact date and time: Nov 15, 2024, 2:32 PM. Also, that's the truth. The backend sent it. The frontend just chose a bad label Practical, not theoretical..
2. Use the "Export data" feature
Settings → Data controls → Export data. The JSON file includes every conversation with precise create_time and update_time fields in Unix milliseconds. Zero ambiguity. If you need to audit history — this is your source of truth Easy to understand, harder to ignore..
3. Sort by "Last updated" manually
The sidebar is sorted correctly. The bug is only the label. Trust the order. The top conversation really is the most recent Easy to understand, harder to ignore..
4. Report it with specifics
OpenAI's bug tracker (help.Here's the thing — openai. com) asks for:
- Browser + version
- OS
- Timezone
- Screenshot of the sidebar
- Conversation IDs (from the URL: `chat.openai.
The more reports with consistent repro steps, the faster a fix ships.
5. Workaround: pin important chats
Pinned conversations show at the top with a pin icon — no timestamp label at all. If you're actively working on 3–5 threads, pin them. Sidestep the bug entirely Worth knowing..
FAQ
Is this a security issue?
No. It's a display bug. Your data isn't exposed, altered, or leaked.
Will OpenAI fix it?
They've patched similar timestamp bugs before (March 2024, July 2024). This specific variant resurfaced in October 2024. History says: yes, but it may take a few deploy cycles.
Does the mobile app have this bug?
Rarely. The iOS and Android apps use native date formatting (Swift RelativeDateTimeFormatter, Android DateUtils.getRelativeTimeSpanString). They handle edge cases differently. Most reports are web-only.
Can I fix it with a userscript?
Technically yes — you could inject a MutationObserver that re-reads the title attribute (the tooltip) and rewrites the label. But it's brittle. The DOM structure changes with every deploy. Not worth the maintenance The details matter here..
Why 23 hours and not 24?
24 hours would flip to "1 day ago." 23 hours is the max value for the "hours" bucket. The fallback logic likely clamps to `Math
min(hours, 23)` in the frontend formatter. This creates a discontinuity between "1 day ago" and "23 hours ago," making the bug more jarring.
Why This Matters
The "23 hours ago" issue isn’t just a minor inconvenience—it reflects a deeper problem in how time deltas are humanized. When systems prioritize brevity over clarity, they risk eroding trust. Users shouldn’t need a debugger’s eye to verify their own memories.
OpenAI’s engineers face a familiar tightrope: balancing performance, localization, and precision in a global, always-on product. Timestamp bugs like this are symptoms of that tension. Until fixed, workarounds like exporting data or pinning chats will remain stopgaps.
The Bigger Picture
This bug also highlights a broader trend: as AI interfaces become more integral to daily workflows, even subtle UI flaws can disrupt productivity. Imagine missing a critical message because its timestamp misled you. The stakes are higher than ever That alone is useful..
For now, the solution is twofold: trust the data (not the labels), and demand better. OpenAI’s track record suggests they’ll eventually resolve this—but until then, users must manage the gap between what’s shown and what’s true.
In the end, timestamps are more than numbers. On top of that, they’re anchors to our digital past. Let’s not let them drift.