|
|
@@ -0,0 +1,65 @@
|
|
|
+/**
|
|
|
+ * Date formatting utilities
|
|
|
+ * All dates are displayed in user's local timezone
|
|
|
+ */
|
|
|
+
|
|
|
+/**
|
|
|
+ * Format a date string to local date and time
|
|
|
+ * @param dateString - ISO date string from backend (UTC)
|
|
|
+ * @returns Formatted date string in user's local timezone
|
|
|
+ */
|
|
|
+export function formatDateTime(dateString?: string | null): string {
|
|
|
+ if (!dateString) return '-';
|
|
|
+ const date = new Date(dateString);
|
|
|
+ if (isNaN(date.getTime())) return '-';
|
|
|
+ return date.toLocaleString();
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Format a date string to local date only
|
|
|
+ * @param dateString - ISO date string from backend (UTC)
|
|
|
+ * @returns Formatted date string in user's local timezone (date only)
|
|
|
+ */
|
|
|
+export function formatDate(dateString?: string | null): string {
|
|
|
+ if (!dateString) return '-';
|
|
|
+ const date = new Date(dateString);
|
|
|
+ if (isNaN(date.getTime())) return '-';
|
|
|
+ return date.toLocaleDateString();
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Format a date string to local time only
|
|
|
+ * @param dateString - ISO date string from backend (UTC)
|
|
|
+ * @returns Formatted time string in user's local timezone (time only)
|
|
|
+ */
|
|
|
+export function formatTime(dateString?: string | null): string {
|
|
|
+ if (!dateString) return '-';
|
|
|
+ const date = new Date(dateString);
|
|
|
+ if (isNaN(date.getTime())) return '-';
|
|
|
+ return date.toLocaleTimeString();
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Format a date string to relative time (e.g., "2 hours ago")
|
|
|
+ * @param dateString - ISO date string from backend (UTC)
|
|
|
+ * @returns Relative time string
|
|
|
+ */
|
|
|
+export function formatRelativeTime(dateString?: string | null): string {
|
|
|
+ if (!dateString) return '-';
|
|
|
+ const date = new Date(dateString);
|
|
|
+ if (isNaN(date.getTime())) return '-';
|
|
|
+
|
|
|
+ const now = new Date();
|
|
|
+ const diffMs = now.getTime() - date.getTime();
|
|
|
+ const diffSec = Math.floor(diffMs / 1000);
|
|
|
+ const diffMin = Math.floor(diffSec / 60);
|
|
|
+ const diffHour = Math.floor(diffMin / 60);
|
|
|
+ const diffDay = Math.floor(diffHour / 24);
|
|
|
+
|
|
|
+ if (diffSec < 60) return 'just now';
|
|
|
+ if (diffMin < 60) return `${diffMin} minute${diffMin > 1 ? 's' : ''} ago`;
|
|
|
+ if (diffHour < 24) return `${diffHour} hour${diffHour > 1 ? 's' : ''} ago`;
|
|
|
+ if (diffDay < 7) return `${diffDay} day${diffDay > 1 ? 's' : ''} ago`;
|
|
|
+
|
|
|
+ return date.toLocaleDateString();
|
|
|
+}
|