Fix time display, fix file attachments not working properly after sending without refresh
This commit is contained in:
94
frontend-vue/src/utils/time.ts
Normal file
94
frontend-vue/src/utils/time.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
/**
|
||||
* Smart timestamp formatting that shows appropriate level of detail based on message age
|
||||
*/
|
||||
export function formatSmartTimestamp(timestamp: string): string {
|
||||
const now = new Date()
|
||||
const date = new Date(timestamp)
|
||||
|
||||
// Handle invalid dates
|
||||
if (isNaN(date.getTime())) {
|
||||
return 'Invalid date'
|
||||
}
|
||||
|
||||
const diffMs = now.getTime() - date.getTime()
|
||||
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24))
|
||||
|
||||
// Same day (today)
|
||||
if (diffDays === 0) {
|
||||
return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })
|
||||
}
|
||||
|
||||
// Yesterday
|
||||
if (diffDays === 1) {
|
||||
const timeStr = date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })
|
||||
return `Yesterday ${timeStr}`
|
||||
}
|
||||
|
||||
// This week (2-6 days ago)
|
||||
if (diffDays <= 6) {
|
||||
const dayStr = date.toLocaleDateString([], { weekday: 'short' })
|
||||
const timeStr = date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })
|
||||
return `${dayStr} ${timeStr}`
|
||||
}
|
||||
|
||||
// This year (more than a week ago)
|
||||
if (now.getFullYear() === date.getFullYear()) {
|
||||
return date.toLocaleDateString([], {
|
||||
month: 'short',
|
||||
day: 'numeric',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit'
|
||||
})
|
||||
}
|
||||
|
||||
// Different year
|
||||
return date.toLocaleDateString([], {
|
||||
month: 'short',
|
||||
day: 'numeric',
|
||||
year: 'numeric'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Format timestamp for accessibility/screen readers with full context
|
||||
*/
|
||||
export function formatTimestampForScreenReader(timestamp: string): string {
|
||||
const date = new Date(timestamp)
|
||||
|
||||
if (isNaN(date.getTime())) {
|
||||
return 'Invalid date'
|
||||
}
|
||||
|
||||
const now = new Date()
|
||||
const diffMs = now.getTime() - date.getTime()
|
||||
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24))
|
||||
|
||||
// Same day
|
||||
if (diffDays === 0) {
|
||||
const timeStr = date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })
|
||||
return `today at ${timeStr}`
|
||||
}
|
||||
|
||||
// Yesterday
|
||||
if (diffDays === 1) {
|
||||
const timeStr = date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })
|
||||
return `yesterday at ${timeStr}`
|
||||
}
|
||||
|
||||
// This week
|
||||
if (diffDays <= 6) {
|
||||
const dayStr = date.toLocaleDateString([], { weekday: 'long' })
|
||||
const timeStr = date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })
|
||||
return `${dayStr} at ${timeStr}`
|
||||
}
|
||||
|
||||
// Older messages - use full date and time
|
||||
return date.toLocaleDateString([], {
|
||||
weekday: 'long',
|
||||
month: 'long',
|
||||
day: 'numeric',
|
||||
year: 'numeric',
|
||||
hour: '2-digit',
|
||||
minute: '2-digit'
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user