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:
parent
b4fe7aaaa0
commit
7264fcb8ee
|
|
@ -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 '';
|
||||
}
|
||||
};
|
||||
Loading…
Reference in New Issue