Sorting Tasks by Date in JavaScript

When managing tasks in a to-do application, it's often necessary to sort tasks by their due dates while maintaining their relative order in other aspects (such as priority). This blog post walks through how to implement date-based sorting for an array of tasks in JavaScript using TypeScript.

Sorting Tasks by Date in JavaScript
Photo by Kevin Ku / Unsplash

1. The Problem

Given an array of tasks, each with a dueDate, we want to sort them in ascending order (earliest first) while ensuring the structure remains intact.

Example Input:

const tasks = [
  {
    id: 1,
    title: "Call Home Builder",
    dueDate: "2025-01-01T00:00:00.000Z",
  },
  {
    id: 2,
    title: "Adjust Watering Schedule",
    dueDate: "2024-12-31T00:00:00.000Z",
  },
  {
    id: 3,
    title: "Power Wash Driveway",
    dueDate: "2025-01-02T00:00:00.000Z",
  },
];

Expected Output (Sorted by Due Date):

[
  {
    id: 2,
    title: "Adjust Watering Schedule",
    dueDate: "2024-12-31T00:00:00.000Z",
  },
  {
    id: 1,
    title: "Call Home Builder",
    dueDate: "2025-01-01T00:00:00.000Z",
  },
  {
    id: 3,
    title: "Power Wash Driveway",
    dueDate: "2025-01-02T00:00:00.000Z",
  },
];

2. Sorting Function Implementation

To achieve this, we can use the Array.prototype.sort() function, ensuring that dates are properly parsed before comparison.

export const sortTasksByDate = (tasks: Task[]): Task[] => {
  return tasks.sort((a, b) => new Date(a.dueDate).getTime() - new Date(b.dueDate).getTime());
};

Breaking Down the Function:

  1. tasks.sort(...) → Modifies the original array by sorting it.
  2. new Date(a.dueDate).getTime() → Converts the dueDate into a timestamp for comparison.
  3. Sorting in ascending order → The earliest date appears first.

3. Integrating the Sorting Function

Once the function is defined, integrating it into an application is simple. Suppose we have a React component fetching tasks from an API:

const { data, isLoading, isError } = useTasks();

if (isLoading) return <p>Loading...</p>;
if (isError) return <p>Error fetching tasks.</p>;

const sortedTasks = sortTasksByDate(data);

Now, sortedTasks will always be ordered from the earliest to the latest due date.

4. Handling Edge Cases

To ensure robustness, consider handling:

  • Invalid date formats → Ensure all dueDate values are in a valid format before sorting.
  • Empty or missing dueDate values → Default to a fallback date or exclude these items.

5. Conclusion

Sorting tasks by date is a common requirement in task management applications. Using JavaScript’s sort() method with new Date().getTime(), you can efficiently order tasks while keeping their structure intact.

🚀 Next Steps: Try adding secondary sorting criteria (e.g., priority) if tasks have the same due date!

Join the Discussion!

Have you implemented date-based sorting in your projects? What challenges did you face, and what optimizations worked best for you? Share your thoughts in the comments below