Spaces:
Sleeping
Sleeping
| /** | |
| * Unified Date Utility for HELPDESK.AI | |
| * Fixes timezone shift issues by explicitly forcing local display. | |
| */ | |
| export const formatTimelineDate = (dateStr) => { | |
| if (!dateStr) return null; | |
| // Ensure the date string is interpreted as UTC if it's an ISO string from DB | |
| let date; | |
| if (typeof dateStr === 'string' && !dateStr.includes('Z') && !dateStr.includes('+')) { | |
| // If it's a raw string without TZ, assume it was intended as UTC from our backend | |
| date = new Date(dateStr + 'Z'); | |
| } else { | |
| date = new Date(dateStr); | |
| } | |
| if (isNaN(date.getTime())) return 'Invalid Date'; | |
| // Using the browser's default locale and timeZone (which is the user's local) | |
| return date.toLocaleString(undefined, { | |
| day: '2-digit', | |
| month: 'short', | |
| year: 'numeric', | |
| hour: '2-digit', | |
| minute: '2-digit', | |
| hour12: true | |
| }); | |
| }; | |
| export const getTimeZoneAbbr = () => { | |
| try { | |
| return new Intl.DateTimeFormat('en-US', { | |
| timeZoneName: 'short' | |
| }) | |
| .formatToParts(new Date()) | |
| .find(part => part.type === 'timeZoneName')?.value || 'IST'; | |
| } catch (_e) { | |
| return 'IST'; | |
| } | |
| }; | |
| export const formatFullTimestamp = (dateStr) => { | |
| const formatted = formatTimelineDate(dateStr); | |
| if (!formatted) return 'Processing...'; | |
| return `${formatted} (${getTimeZoneAbbr()})`; | |
| }; | |