jacquardSnapshot

← 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();
}