Files
SuperCharged-Claude-Code-Up…/dexto/packages/webui/lib/date-utils.ts
admin b52318eeae feat: Add intelligent auto-router and enhanced integrations
- Add intelligent-router.sh hook for automatic agent routing
- Add AUTO-TRIGGER-SUMMARY.md documentation
- Add FINAL-INTEGRATION-SUMMARY.md documentation
- Complete Prometheus integration (6 commands + 4 tools)
- Complete Dexto integration (12 commands + 5 tools)
- Enhanced Ralph with access to all agents
- Fix /clawd command (removed disable-model-invocation)
- Update hooks.json to v5 with intelligent routing
- 291 total skills now available
- All 21 commands with automatic routing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-28 00:27:56 +04:00

112 lines
3.0 KiB
TypeScript

/**
* Date formatting utilities using native Intl API
* Zero-bundle-cost alternative to date-fns
*
* Browser support: All modern browsers (2020+)
*/
/**
* Format date in locale-specific format
* @example formatDate(Date.now()) → "Nov 3, 2025"
*/
export function formatDate(timestamp: number, locale = 'en'): string {
return new Intl.DateTimeFormat(locale, {
year: 'numeric',
month: 'short',
day: 'numeric',
}).format(timestamp);
}
/**
* Format time in locale-specific format
* @example formatTime(Date.now()) → "8:30 PM"
*/
export function formatTime(timestamp: number, locale = 'en'): string {
return new Intl.DateTimeFormat(locale, {
hour: 'numeric',
minute: '2-digit',
}).format(timestamp);
}
/**
* Format date and time together
* @example formatDateTime(Date.now()) → "Nov 3, 2025, 8:30 PM"
*/
export function formatDateTime(timestamp: number, locale = 'en'): string {
return new Intl.DateTimeFormat(locale, {
year: 'numeric',
month: 'short',
day: 'numeric',
hour: 'numeric',
minute: '2-digit',
}).format(timestamp);
}
/**
* Format relative time (e.g., "2 hours ago", "in 3 days")
* @example formatRelativeTime(Date.now() - 7200000) → "2 hours ago"
*/
export function formatRelativeTime(timestamp: number, locale = 'en'): string {
const now = Date.now();
const diff = timestamp - now;
const absDiff = Math.abs(diff);
// Define time units in milliseconds
const minute = 60 * 1000;
const hour = 60 * minute;
const day = 24 * hour;
const week = 7 * day;
const month = 30 * day;
const year = 365 * day;
let value: number;
let unit: Intl.RelativeTimeFormatUnit;
if (absDiff < minute) {
value = Math.round(diff / 1000);
unit = 'second';
} else if (absDiff < hour) {
value = Math.round(diff / minute);
unit = 'minute';
} else if (absDiff < day) {
value = Math.round(diff / hour);
unit = 'hour';
} else if (absDiff < week) {
value = Math.round(diff / day);
unit = 'day';
} else if (absDiff < month) {
value = Math.round(diff / week);
unit = 'week';
} else if (absDiff < year) {
value = Math.round(diff / month);
unit = 'month';
} else {
value = Math.round(diff / year);
unit = 'year';
}
return new Intl.RelativeTimeFormat(locale, {
numeric: 'auto',
}).format(value, unit);
}
/**
* Format date in ISO format (YYYY-MM-DD)
* @example formatISO(Date.now()) → "2025-11-03"
*/
export function formatISO(timestamp: number): string {
return new Date(timestamp).toISOString().split('T')[0];
}
/**
* Format compact date (shorter format for space-constrained UI)
* @example formatCompact(Date.now()) → "11/3/25"
*/
export function formatCompact(timestamp: number, locale = 'en'): string {
return new Intl.DateTimeFormat(locale, {
year: '2-digit',
month: 'numeric',
day: 'numeric',
}).format(timestamp);
}