DEV Community

Alex Spinov
Alex Spinov

Posted on

date-fns Has a Free API — Here's How to Handle Dates Without Moment.js

date-fns is a modern JavaScript date utility library with 200+ tree-shakeable functions for parsing, formatting, and manipulating dates.

Installation

npm install date-fns
Enter fullscreen mode Exit fullscreen mode

Formatting

import { format, formatDistance, formatRelative } from "date-fns";

const now = new Date();
console.log(format(now, "yyyy-MM-dd HH:mm:ss")); // 2026-03-29 14:30:00
console.log(format(now, "EEEE, MMMM do yyyy")); // Saturday, March 29th 2026
console.log(formatDistance(new Date(2026, 2, 25), now, { addSuffix: true })); // 4 days ago
Enter fullscreen mode Exit fullscreen mode

Parsing

import { parse, parseISO, isValid } from "date-fns";

const date1 = parseISO("2026-03-29T10:00:00Z");
const date2 = parse("29/03/2026", "dd/MM/yyyy", new Date());
console.log(isValid(date1)); // true
Enter fullscreen mode Exit fullscreen mode

Comparison

import { isBefore, isAfter, differenceInDays, isWithinInterval } from "date-fns";

const start = new Date(2026, 0, 1);
const end = new Date(2026, 11, 31);
console.log(differenceInDays(end, start)); // 364
console.log(isWithinInterval(new Date(), { start, end })); // true
Enter fullscreen mode Exit fullscreen mode

Manipulation

import { addDays, subMonths, startOfWeek, endOfMonth, eachDayOfInterval } from "date-fns";

const tomorrow = addDays(new Date(), 1);
const weekStart = startOfWeek(new Date(), { weekStartsOn: 1 });
const days = eachDayOfInterval({ start: new Date(2026, 2, 1), end: new Date(2026, 2, 31) });
console.log(`March has ${days.length} days`);
Enter fullscreen mode Exit fullscreen mode

Locales

import { format } from "date-fns";
import { de, fr, ja } from "date-fns/locale";

console.log(format(new Date(), "PPPP", { locale: de })); // Samstag, 29. März 2026
console.log(format(new Date(), "PPPP", { locale: fr })); // samedi 29 mars 2026
Enter fullscreen mode Exit fullscreen mode

Intervals and Ranges

import { eachWeekOfInterval, getWeek, getYear } from "date-fns";

const weeks = eachWeekOfInterval({
  start: new Date(2026, 0, 1),
  end: new Date(2026, 2, 31)
});
console.log(`Q1 2026 has ${weeks.length} weeks`);
Enter fullscreen mode Exit fullscreen mode

Need to extract or automate web content at scale? Check out my web scraping tools on Apify — no coding required. Or email me at spinov001@gmail.com for custom solutions.

Top comments (0)