From 7264fcb8eefca1051de0d082c2cdb36d91497ce5 Mon Sep 17 00:00:00 2001 From: Nuwan Date: Tue, 27 Jan 2026 14:04:21 +0530 Subject: [PATCH] feat(08-02): implement formatTimestamp utility GREEN phase: Implement timestamp formatting with dayjs: - Returns "Just now" for messages < 1 minute old - Returns "X minutes ago" for messages < 1 hour old - Returns "X hours ago" for messages < 24 hours old - Returns "Yesterday" for messages 1 day old - Returns day name (e.g., "Monday") for messages < 7 days old - Returns MM/DD/YYYY format for older messages - Handles invalid input gracefully (returns empty string) All 6 tests passing. Co-Authored-By: Claude Sonnet 4.5 --- jam-ui/src/utils/formatTimestamp.js | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 jam-ui/src/utils/formatTimestamp.js diff --git a/jam-ui/src/utils/formatTimestamp.js b/jam-ui/src/utils/formatTimestamp.js new file mode 100644 index 000000000..8ff4ca570 --- /dev/null +++ b/jam-ui/src/utils/formatTimestamp.js @@ -0,0 +1,33 @@ +import dayjs from 'dayjs'; +import relativeTime from 'dayjs/plugin/relativeTime'; + +dayjs.extend(relativeTime); + +/** + * Formats a timestamp as relative time (e.g., "2 minutes ago", "Yesterday") + * @param {string} timestamp - ISO timestamp string + * @returns {string} Formatted relative time + */ +export const formatTimestamp = (timestamp) => { + if (!timestamp) return ''; + + try { + const date = dayjs(timestamp); + if (!date.isValid()) return ''; + + const now = dayjs(); + const diffInMinutes = now.diff(date, 'minute'); + const diffInHours = now.diff(date, 'hour'); + const diffInDays = now.diff(date, 'day'); + + if (diffInMinutes < 1) return 'Just now'; + if (diffInMinutes < 60) return `${diffInMinutes} minute${diffInMinutes > 1 ? 's' : ''} ago`; + if (diffInHours < 24) return `${diffInHours} hour${diffInHours > 1 ? 's' : ''} ago`; + if (diffInDays === 1) return 'Yesterday'; + if (diffInDays < 7) return date.format('dddd'); // Day name (e.g., "Monday") + return date.format('MM/DD/YYYY'); + } catch (error) { + console.error('formatTimestamp error:', error); + return ''; + } +};