Files
dictia-public/static/js/utils/dateUtils.js

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 };
}
}