Altcademy - a Forbes magazine logo Best Coding Bootcamp 2023

How to format date in JavaScript

In this blog post, we're going to learn how to format dates in JavaScript. Working with dates is a common task for programmers, and JavaScript provides several built-in objects and methods to help us manage dates and times. We'll cover the basics of the JavaScript Date object, how to create and manipulate dates, and how to format them according to your needs.

The JavaScript Date Object

In JavaScript, the Date object is used to represent dates and times. It provides many methods for creating, modifying, and formatting dates. Before diving into formatting, let's take a quick look at how to create a Date object.

To create a new Date object, use the new Date() constructor:

const currentDate = new Date();
console.log(currentDate); // The current date and time

The Date object created without any arguments will represent the current date and time. You can also create a Date object representing a specific date and time by providing arguments when calling the constructor:

const specificDate = new Date(2022, 0, 1);
console.log(specificDate); // January 1, 2022

In the example above, the first argument is the year, the second argument is the month (with 0 representing January), and the third argument is the day of the month. You can also provide additional arguments for hours, minutes, seconds, and milliseconds if needed.

Now that we know how to create a Date object let's explore how to format dates in JavaScript.

Formatting the Date

When working with dates, you'll often need to display them in a specific format. JavaScript provides several methods for extracting different parts of a date, which can be combined to create custom date formats. Here are some of the most commonly used methods:

  • getFullYear(): Returns the year (4 digits)
  • getMonth(): Returns the month (0-11)
  • getDate(): Returns the day of the month (1-31)
  • getDay(): Returns the day of the week (0-6)
  • getHours(): Returns the hour (0-23)
  • getMinutes(): Returns the minute (0-59)
  • getSeconds(): Returns the second (0-59)
  • getMilliseconds(): Returns the milliseconds (0-999)

Let's say we want to display the date in the format "MM/DD/YYYY". We can create a function that takes a Date object as an argument and returns the formatted date as a string:

function formatDate(date) {
  const month = date.getMonth() + 1;
  const day = date.getDate();
  const year = date.getFullYear();

  return month + '/' + day + '/' + year;
}

const myDate = new Date(2022, 0, 1);
console.log(formatDate(myDate)); // "1/1/2022"

In the example above, we use the getMonth(), getDate(), and getFullYear() methods to extract the month, day, and year from the Date object. We then concatenate these values with slashes to create a string in the desired format.

Note that we added 1 to the month because getMonth() returns a zero-based value (i.e., January is 0, February is 1, etc.).

Adding Leading Zeros

In the previous example, the output for January was "1" instead of "01". We can improve our formatDate function by adding leading zeros to the month and day when necessary. To do this, we can create a helper function called pad that takes a number and returns a string with a leading zero if the number is less than 10:

function pad(number) {
  return number < 10 ? '0' + number : number;
}

function formatDate(date) {
  const month = pad(date.getMonth() + 1);
  const day = pad(date.getDate());
  const year = date.getFullYear();

  return month + '/' + day + '/' + year;
}

const myDate = new Date(2022, 0, 1);
console.log(formatDate(myDate)); // "01/01/2022"

Now our formatDate function correctly adds leading zeros to the month and day when needed.

Formatting Time

We can also format the time portion of a Date object using similar techniques. Let's say we want to display the time in the format "HH:mm:ss". We can create a function called formatTime that takes a Date object and returns the formatted time as a string:

function formatTime(date) {
  const hours = pad(date.getHours());
  const minutes = pad(date.getMinutes());
  const seconds = pad(date.getSeconds());

  return hours + ':' + minutes + ':' + seconds;
}

const myDate = new Date(2022, 0, 1, 9, 30, 15);
console.log(formatTime(myDate)); // "09:30:15"

In this example, we use the getHours(), getMinutes(), and getSeconds() methods to extract the hours, minutes, and seconds from the Date object. We then use the pad function to add leading zeros when necessary and concatenate the values with colons to create the desired format.

Locale-Specific Formatting

In many cases, you'll want to format dates and times according to the user's locale (i.e., the user's country, language, and preferences). JavaScript provides built-in methods for locale-specific formatting using the toLocaleDateString() and toLocaleTimeString() methods.

The toLocaleDateString() method returns a string with a language-sensitive representation of the date portion of a Date object:

const myDate = new Date(2022, 0, 1);
console.log(myDate.toLocaleDateString()); // e.g., "1/1/2022" for US English

Similarly, the toLocaleTimeString() method returns a string with a language-sensitive representation of the time portion of a Date object:

const myDate = new Date(2022, 0, 1, 9, 30, 15);
console.log(myDate.toLocaleTimeString()); // e.g., "9:30:15 AM" for US English

Both methods accept an optional locales argument, which is a string or an array of strings that specifies the locale(s) to use for formatting. They also accept an optional options argument, which is an object that allows you to customize the formatting. For example, you can specify a different date or time format, display the time in 24-hour format, or include the day of the week.

Here's an example of how to use the toLocaleDateString() method with custom options:

const myDate = new Date(2022, 0, 1);

const options = {
  weekday: 'long',
  year: 'numeric',
  month: 'long',
  day: 'numeric'
};

console.log(myDate.toLocaleDateString('en-US', options)); // "Saturday, January 1, 2022"

In this example, we specify a custom format that includes the day of the week, the full month name, and the full year. The output will be different for other locales.

Conclusion

In this blog post, we've learned how to format dates and times in JavaScript using the built-in Date object and its methods. We've also explored how to create custom date and time formats and how to use the toLocaleDateString() and toLocaleTimeString() methods for locale-specific formatting.

Remember that working with dates can be tricky due to time zones, daylight saving time, and other factors. Always test your code thoroughly and consider using a library like date-fns or Moment.js if you need more advanced date and time manipulation features.