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 <noreply@anthropic.com>
This commit is contained in:
Nuwan 2026-01-27 14:04:21 +05:30
parent b4fe7aaaa0
commit 7264fcb8ee
1 changed files with 33 additions and 0 deletions

View File

@ -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 '';
}
};