JavaScript
javascript date utility

formatDate

Utility function for formatting dates in various formats with timezone support.

type DateFormat = 'short' | 'long' | 'relative' | 'iso';

export function formatDate(
  date: Date | string | number,
  format: DateFormat = 'short',
  locale: string = 'en-US'
): string {
  const dateObj = typeof date === 'string' || typeof date === 'number'
    ? new Date(date)
    : date;

  if (isNaN(dateObj.getTime())) {
    return 'Invalid Date';
  }

  switch (format) {
    case 'short':
      return dateObj.toLocaleDateString(locale, {
        year: 'numeric',
        month: 'short',
        day: 'numeric',
      });

    case 'long':
      return dateObj.toLocaleDateString(locale, {
        year: 'numeric',
        month: 'long',
        day: 'numeric',
        weekday: 'long',
      });

    case 'relative':
      const now = new Date();
      const diffInSeconds = Math.floor((now.getTime() - dateObj.getTime()) / 1000);
      
      if (diffInSeconds < 60) return 'just now';
      if (diffInSeconds < 3600) return `${Math.floor(diffInSeconds / 60)}m ago`;
      if (diffInSeconds < 86400) return `${Math.floor(diffInSeconds / 3600)}h ago`;
      if (diffInSeconds < 604800) return `${Math.floor(diffInSeconds / 86400)}d ago`;
      
      return formatDate(dateObj, 'short', locale);

    case 'iso':
      return dateObj.toISOString();

    default:
      return dateObj.toLocaleDateString(locale);
  }
}

Usage

formatDate(new Date(), 'short'); // "Jan 15, 2025"
formatDate(new Date(), 'long'); // "Wednesday, January 15, 2025"
formatDate(new Date(Date.now() - 3600000), 'relative'); // "1h ago"
formatDate(new Date(), 'iso'); // "2025-01-15T12:00:00.000Z"