Initial release: DictIA v0.8.14-alpha (fork de Speakr, AGPL-3.0)
This commit is contained in:
83
static/js/utils/dateUtils.js
Normal file
83
static/js/utils/dateUtils.js
Normal file
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
* 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 };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user