Creates a comparator function for date-based sorting with automatic string parsing.

Generates a comparator that extracts date values from objects, automatically converting string representations to Date objects for numerical comparison. Supports both single dates and arrays of dates for complex temporal sorting.

Date strings are parsed using the standard Date constructor, which supports ISO 8601 format, RFC 2822 format, and other common date representations. The comparison is performed on millisecond timestamps for precise ordering.

  interface Event {
id: string;
title: string;
startDate: string;
endDate: string;
createdAt: string;
updatedAt: string;
}

const events: Event[] = [
{
id: '1',
title: 'Conference',
startDate: '2024-03-15T09:00:00Z',
endDate: '2024-03-15T17:00:00Z',
createdAt: '2024-01-10T10:00:00Z',
updatedAt: '2024-02-01T15:30:00Z'
},
{
id: '2',
title: 'Workshop',
startDate: '2024-03-10T14:00:00Z',
endDate: '2024-03-10T16:00:00Z',
createdAt: '2024-01-15T11:00:00Z',
updatedAt: '2024-01-20T09:15:00Z'
}
];

// Sort by start date (chronological order)
events.sort(GaffComparator.dates(event => event.startDate));

// Sort by creation date (oldest first)
events.sort(GaffComparator.dates(event => event.createdAt));

// Multi-field: start date, then end date
events.sort(GaffComparator.dates(event => [event.startDate, event.endDate]));

// Sort by modification history: created date, then updated date
events.sort(GaffComparator.dates(event => [event.createdAt, event.updatedAt]));

// Validate API date sorting
await TestValidator.sort("event chronological sorting")(
(sortFields) => eventApi.getEvents({ sort: sortFields })
)("startDate")(
GaffComparator.dates(event => event.startDate)
)("+");

// Test complex date-based sorting
const sortByEventSchedule = GaffComparator.dates(event => [
event.startDate,
event.endDate
]);
  • Type Parameters

    • T

      The type of objects being compared

    Parameters

    • getter: (input: T) => string | string[]

      Function that extracts date string(s) from input objects

    Returns (x: T, y: T) => number

    A comparator function suitable for Array.sort()