How to use Moment.js for date manipulation?

Loading

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

Leave a Reply

Your email address will not be published. Required fields are marked *