Moment.js is a powerful JavaScript library used for parsing, validating, formatting, and manipulating dates and times. It simplifies complex date calculations and ensures consistency across different time zones and locales.
1. Installing Moment.js
A. Using a CDN (For Browser)
Add the following script to your HTML file:
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js"></script>
B. Installing via NPM (For Node.js or Frontend Frameworks)
npm install moment
C. Importing in JavaScript
const moment = require('moment'); // For Node.js
// or
import moment from 'moment'; // For ES6 modules
2. Creating and Formatting Dates
A. Creating a Moment.js Date Object
1. Current Date and Time
let now = moment();
console.log(now.format()); // Example output: 2025-03-28T10:30:00-05:00
2. Creating a Specific Date
let customDate = moment("2025-12-25", "YYYY-MM-DD");
console.log(customDate.format("YYYY-MM-DD")); // Output: 2025-12-25
3. Parsing a Date from a String
let parsedDate = moment("March 10, 2025", "MMMM DD, YYYY");
console.log(parsedDate.format("YYYY-MM-DD")); // Output: 2025-03-10
B. Formatting Dates
1. Basic Date Formatting
console.log(moment().format("YYYY-MM-DD")); // Output: 2025-03-28
console.log(moment().format("MM/DD/YYYY")); // Output: 03/28/2025
console.log(moment().format("dddd, MMMM Do YYYY")); // Output: Friday, March 28th 2025
2. Time Formatting
console.log(moment().format("hh:mm A")); // Output: 10:30 AM
console.log(moment().format("HH:mm:ss")); // Output: 10:30:00
3. Full Date & Time Formatting
console.log(moment().format("MMMM Do YYYY, h:mm:ss a"));
// Output: March 28th 2025, 10:30:00 am
3. Manipulating Dates
A. Adding and Subtracting Time
let today = moment();
console.log(today.add(7, 'days').format("YYYY-MM-DD")); // Adds 7 days
console.log(today.subtract(2, 'months').format("YYYY-MM-DD")); // Subtracts 2 months
B. Changing Specific Date Parts
let newDate = moment().set({ 'year': 2030, 'month': 5, 'date': 15 });
console.log(newDate.format("YYYY-MM-DD")); // Output: 2030-06-15
4. Comparing Dates
A. Checking if a Date is Before or After
let date1 = moment("2025-03-28");
let date2 = moment("2025-04-01");
console.log(date1.isBefore(date2)); // Output: true
console.log(date1.isAfter(date2)); // Output: false
B. Checking if Two Dates Are the Same
console.log(moment("2025-03-28").isSame("2025-03-28")); // Output: true
console.log(moment("2025-03-28").isSame("2025-03-29")); // Output: false
5. Calculating Time Differences
A. Finding the Difference Between Two Dates
let start = moment("2025-01-01");
let end = moment("2025-03-28");
console.log(end.diff(start, 'days')); // Output: 86 (number of days)
console.log(end.diff(start, 'months')); // Output: 2 (number of months)
console.log(end.diff(start, 'years')); // Output: 0 (number of years)
B. Duration Between Two Dates
let duration = moment.duration(end.diff(start));
console.log(duration.asDays()); // Output: 86
console.log(duration.asMonths()); // Output: 2.83
console.log(duration.asYears()); // Output: 0.23
6. Handling Time Zones with Moment-Timezone
Moment.js does not handle time zones by default, but moment-timezone can be used.
A. Installing Moment-Timezone
npm install moment-timezone
B. Converting Between Time Zones
const moment = require('moment-timezone');
let utcTime = moment.utc("2025-03-28 12:00");
let localTime = utcTime.tz("America/New_York");
console.log(localTime.format("YYYY-MM-DD HH:mm:ss z")); // Output: 2025-03-28 08:00:00 EDT
7. Working with Locales
A. Setting a Locale
moment.locale('fr'); // Set locale to French
console.log(moment().format('LLLL')); // Output: vendredi 28 mars 2025 10:30
B. Available Locales
console.log(moment.locales()); // Lists all available locales
8. Converting Dates to Relative Time
console.log(moment("2025-03-20").fromNow()); // Output: 8 days ago
console.log(moment("2025-04-05").fromNow()); // Output: in 8 days
9. Validating Dates
console.log(moment("2025-02-30", "YYYY-MM-DD", true).isValid()); // Output: false
console.log(moment("2025-03-28", "YYYY-MM-DD", true).isValid()); // Output: true
10. Converting Moment.js Objects to Native JavaScript Dates
let nativeDate = moment().toDate();
console.log(nativeDate instanceof Date); // Output: true