84 lines
3.2 KiB
JavaScript
84 lines
3.2 KiB
JavaScript
/**
|
|
* Date utility functions for formatting and parsing dates
|
|
*/
|
|
|
|
export function formatDateTime(dateString) {
|
|
if (!dateString) return '';
|
|
const date = new Date(dateString);
|
|
const now = new Date();
|
|
const diffMs = now - date;
|
|
const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
|
|
|
|
if (diffDays === 0) {
|
|
return 'Today at ' + date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true });
|
|
} else if (diffDays === 1) {
|
|
return 'Yesterday at ' + date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true });
|
|
} else if (diffDays < 7) {
|
|
const dayName = date.toLocaleDateString('en-US', { weekday: 'long' });
|
|
return dayName + ' at ' + date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true });
|
|
} else {
|
|
return date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' });
|
|
}
|
|
}
|
|
|
|
export function formatTimeAgo(dateString) {
|
|
if (!dateString) return '';
|
|
const date = new Date(dateString);
|
|
const now = new Date();
|
|
const diffMs = now - date;
|
|
const diffMins = Math.floor(diffMs / 60000);
|
|
const diffHours = Math.floor(diffMs / 3600000);
|
|
const diffDays = Math.floor(diffMs / 86400000);
|
|
|
|
if (diffMins < 1) return 'Just now';
|
|
if (diffMins < 60) return `${diffMins} minute${diffMins > 1 ? 's' : ''} ago`;
|
|
if (diffHours < 24) return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;
|
|
if (diffDays < 30) return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;
|
|
|
|
const diffMonths = Math.floor(diffDays / 30);
|
|
if (diffMonths < 12) return `${diffMonths} month${diffMonths > 1 ? 's' : ''} ago`;
|
|
|
|
const diffYears = Math.floor(diffDays / 365);
|
|
return `${diffYears} year${diffYears > 1 ? 's' : ''} ago`;
|
|
}
|
|
|
|
export function formatDuration(seconds) {
|
|
if (!seconds || seconds < 0) return '0:00';
|
|
const hrs = Math.floor(seconds / 3600);
|
|
const mins = Math.floor((seconds % 3600) / 60);
|
|
const secs = Math.floor(seconds % 60);
|
|
|
|
if (hrs > 0) {
|
|
return `${hrs}:${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
|
|
}
|
|
return `${mins}:${secs.toString().padStart(2, '0')}`;
|
|
}
|
|
|
|
export function parseDateRange(preset) {
|
|
const now = new Date();
|
|
const today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
|
|
|
|
switch (preset) {
|
|
case 'today':
|
|
return { start: today, end: new Date() };
|
|
case 'yesterday':
|
|
const yesterday = new Date(today);
|
|
yesterday.setDate(yesterday.getDate() - 1);
|
|
return { start: yesterday, end: today };
|
|
case 'week':
|
|
const weekStart = new Date(today);
|
|
weekStart.setDate(weekStart.getDate() - 7);
|
|
return { start: weekStart, end: new Date() };
|
|
case 'month':
|
|
const monthStart = new Date(today);
|
|
monthStart.setMonth(monthStart.getMonth() - 1);
|
|
return { start: monthStart, end: new Date() };
|
|
case 'year':
|
|
const yearStart = new Date(today);
|
|
yearStart.setFullYear(yearStart.getFullYear() - 1);
|
|
return { start: yearStart, end: new Date() };
|
|
default:
|
|
return { start: null, end: null };
|
|
}
|
|
}
|