Effortlessly handle dates and times in JavaScript with Luxon

Effortlessly handle dates and times in JavaScript with Luxon

Effortlessly handle dates and times in JavaScript with Luxon was initially published on Monday January 02 2023 on the Tech Dev Blog. For the latest up-to-date content, fresh out of the oven, visit https://techdevblog.io and subscribe to our newsletter!

Introduction

Luxon is a powerful and lightweight JavaScript library for working with dates and times. It was created as an alternative to the popular Moment.js library, with the goal of being faster, smaller, and easier to use.

One of the key benefits of Luxon is its strong support for the Internationalization (i18n) features of the ECMAScript Internationalization API, which allows for formatting and parsing dates and times in a variety of languages and locales.

Luxon also has a number of other useful features, including support for time zones, duration manipulation, and calculations.

Installation

To use Luxon in your project, you can install it using npm:

npm install luxon

Alternatively, you can download the latest version from the GitHub releases page and include it in your project manually (but you really shouldn't)

Once you have Luxon installed, you can use it in your JavaScript code by importing it:

import { DateTime } from 'luxon';

Dates and times

One of the main features of Luxon is the DateTime class, which represents a specific point in time. You can create a DateTime object by calling the DateTime constructor and passing in a date and time as arguments:

const date = DateTime.fromISO('2022-01-01T00:00:00Z');
console.log(date); // 2022-01-01T00:00:00.000Z

You can also create a DateTime object using the current date and time by calling the local() static method:

const now = DateTime.local();
console.log(now); // 2022-01-01T00:00:00.000-05:00

Note that the local() method returns a DateTime object in the local time zone of the machine running the code. If you want to create a DateTime object in a specific time zone, you can use the fromObject() static method and pass in a configuration object with the desired time zone:

const date = DateTime.fromObject({
  zone: 'America/New_York',
});
console.log(date); // 2022-01-01T00:00:00.000-05:00

Formatting and parsing

Formatting

Once you have a DateTime object, you can use its toFormat() method to convert it to a string representation in a specific format. The method takes a string argument that specifies the format using a combination of letters and symbols. For example, to format a date as a full date and time in the ISO 8601 format, you can use the following code:

const date = DateTime.fromObject({
  zone: 'America/New_York',
});

console.log(date.toISO()); // 2022-01-01T00:00:00.000-05:00

Or you can specify a custom format:

const formatted = date.toFormat('yyyy-MM-dd HH:mm:ss');
console.log(formatted); // 2022-01-01 00:00:00

You can also use the toLocaleString() method to format a DateTime object according to the conventions of a specific locale. For example, to format a date as a full date and time in the English (United States) locale, you can use the following code:

const formatted = date.toLocaleString(DateTime.DATE_FULL);
console.log(formatted); // Saturday, January 1, 2022

Parsing

In addition to formatting dates and times, Luxon also provides tools for parsing them. You can use the fromFormat() static method to parse a string representation of a date and time into a DateTime object. For example, to parse a date in the ISO 8601 format, you can use the following code:

const date = DateTime.fromFormat('2022-01-01T00:00:00Z', 'yyyy-MM-ddTHH:mm:ssZ');
console.log(date); // 2022-01-01T00:00:00.000Z

You can also use the fromISO() static method to parse a string representation of a date and time in the ISO 8601 format. This method is faster than fromFormat() and is recommended for parsing dates in this format.

const date = DateTime.fromISO('2022-01-01T00:00:00Z');
console.log(date); // 2022-01-01T00:00:00.000Z

Time zones

Luxon has strong support for time zones and allows you to work with dates and times in any time zone. When you create a DateTime object, you can specify the time zone using the zone option. For example, to create a DateTime object in the Pacific Standard Time (PST) time zone, you can use the following code:

const date = DateTime.fromObject({
  zone: 'America/Los_Angeles',
});
console.log(date); // 2022-01-01T00:00:00.000-08:00

You can also use the setZone() method to change the time zone of an existing DateTime object. This method returns a new DateTime object with the same point in time, but in the specified time zone:

const date = DateTime.fromObject({
  zone: 'America/Los_Angeles',
});
const newDate = date.setZone('America/New_York');
console.log(newDate); // 2022-01-01T03:00:00.000-05:00

Durations

In addition to working with dates and times, Luxon also provides tools for working with durations. A duration is a period of time, represented as a number of days, hours, minutes, seconds, and milliseconds.

You can create a duration object using the Duration constructor and passing in an object with the desired values:

const duration = Duration.fromObject({
  days: 1,
  hours: 2,
  minutes: 30,
  seconds: 45,
  milliseconds: 123,
});
console.log(duration); // 1.11:30:45.123

You can also create a duration object by specifying the total number of milliseconds using the of method:

const duration = Duration.of('milliseconds', 1000);
console.log(duration); // 0.00:00:01

Once you have a duration object, you can use its toFormat() method to convert it to a string representation in a specific format. The method takes a string argument that specifies the format using a combination of letters and symbols. For example, to format a duration as a number of days, hours, minutes, and seconds, you can use the following code:

const formatted = duration.toFormat('d:hh:mm:ss');
console.log(formatted); // 1:02:30:45

You can also use the toObject() method to convert a duration to an object with the individual values for days, hours, minutes, seconds, and milliseconds:

const obj = duration.toObject();
console.log(obj); // { days: 1, hours: 2, minutes: 30, seconds: 45, milliseconds: 123 }

Calculations

Luxon provides a number of methods for performing calculations with dates and times. For example, you can use the plus() method to add a duration to a DateTime object and get a new DateTime object representing the resulting date and time:

const date = DateTime.fromISO('2022-01-01T00:00:00Z');
const duration = Duration.fromObject({ days: 1 });
const newDate = date.plus(duration);
console.log(newDate); // 2022-01-02T00:00:00.000Z

You can also use the minus() method to subtract a duration from a DateTime object and get a new DateTime object representing the resulting date and time:

const date = DateTime.fromISO('2022-01-01T00:00:00Z');
const duration = Duration.fromObject({ days: 1 });
const newDate = date.minus(duration);
console.log(newDate); // 2021-12-31T00:00:00.000Z

In addition to adding and subtracting durations, you can also use the diff() method to calculate the difference between two DateTime objects and get a duration object representing the result. For example, to calculate the difference between two dates in days, you can use the following code:

const date1 = DateTime.fromISO('2022-01-01T00:00:00Z');
const date2 = DateTime.fromISO('2022-01-03T00:00:00Z');
const duration = date1.diff(date2, 'days');
console.log(duration); // 2

Conclusion

In this tutorial, we have covered the main features of the Luxon JavaScript library for working with dates and times. We have seen how to create and format DateTime objects, how to work with time zones and durations, and how to perform calculations with dates and times.

Luxon is a powerful and easy-to-use library that can greatly simplify your work with dates and times in JavaScript. Whether you need to format dates and times for display, parse dates and times from strings, or perform calculations with dates and times, Luxon has you covered.

I hope this tutorial has been helpful in getting you started with Luxon. If you have any questions or comments, don't hesitate to reach out. Happy coding!

Effortlessly handle dates and times in JavaScript with Luxon was initially published on Monday January 02 2023 on the Tech Dev Blog. For the latest up-to-date content, fresh out of the oven, visit https://techdevblog.io and subscribe to our newsletter!

Did you find this article valuable?

Support Tech Dev Blog by becoming a sponsor. Any amount is appreciated!