← snapshot
789 bytes
/** A timestamp: relative in text, absolute in the title. */
export function Time({ at }: { at: number }) {
const date = new Date(at);
return (
<time className="jac-small" dateTime={date.toISOString()} title={date.toISOString()}>
{relative(at)}
</time>
);
}
function relative(at: number): string {
const delta = Date.now() - at;
if (delta < 0) return new Date(at).toLocaleString();
const seconds = Math.floor(delta / 1000);
if (seconds < 60) return "just now";
const minutes = Math.floor(seconds / 60);
if (minutes < 60) return `${minutes}m ago`;
const hours = Math.floor(minutes / 60);
if (hours < 24) return `${hours}h ago`;
const days = Math.floor(hours / 24);
if (days < 30) return `${days}d ago`;
return new Date(at).toLocaleDateString();
}