Skip to content

dstelljes/luxon-angular

Repository files navigation

luxon-angular

This is a collection of date/time pipes for Angular (12+) based on Luxon.

Getting started

  • Install (making sure Luxon is installed as well):

    npm install --save luxon luxon-angular
    

    or

    yarn add luxon luxon-angular
    

    If you plan to use the relative formatting pipes, also install the relative-time-format polyfill.

  • Import LuxonModule:

    import { NgModule } from '@angular/core';
    import { LuxonModule } from 'luxon-angular';
    
    @NgModule({
      imports: [
        LuxonModule
      ]
    })
    export class AppModule {
    
    };
  • Start using the pipes:

    import { Component } from '@angular/core';
    
    @Component({
      template: `
        This component was created at {{ date | dateTimeFromJsDate | dateTimeToFormat:'tt' }}!
      `
    })
    export class AppComponent {
      date: Date;
    
      constructor() {
        this.date = new Date();
      }
    };

Available pipes

Parsing

dateTimeFromFormat

Transforms an arbitrarily formatted date into a DateTime that can be used with the non-parsing pipes:

{{ '02 Jan 2006' | dateTimeFromFormat:'dd LLL yyyy' }}
{{ 'January 2, 2006 3:04 PM' | dateTimeFromFormat:'LLLL d, yyyy h:mm a' }}

dateTimeFromHttp

Transforms a HTTP-style date into a DateTime that can be used with the non-parsing pipes:

{{ 'Monday, 02-Jan-06 22:04:05 GMT' | dateTimeFromHttp }}
{{ 'Mon, 02 Jan 2006 22:04:05 GMT' | dateTimeFromHttp }}

dateTimeFromIso

Transforms an ISO 8601 date into a DateTime that can be used with the non-parsing pipes:

{{ '2006-01-02' | dateTimeFromIso }}
{{ '2006-01-02T15' | dateTimeFromIso }}
{{ '2006-01-02T15:04:05-07:00' | dateTimeFromIso }}

dateTimeFromJsDate

Transforms a JavaScript Date object into a DateTime that can be used with the non-parsing pipes:

{{ date | dateTimeFromJsDate }}

dateTimeFromMilliseconds

Transforms a timestamp in milliseconds from epoch into a DateTime that can be used with the non-parsing pipes:

{{ date | dateTimeFromMilliseconds }}

dateTimeFromRfc2822

Transforms a date formatted according to RFC 2822 into a DateTime that can be used with the non-parsing pipes:

{{ 'Mon, 02 Jan 2006 15:04:05 -0700' | dateTimeFromRfc2822 }}

dateTimeFromSql

Transforms a SQL-style date into a DateTime that can be used with the non-parsing pipes:

{{ '2006-01-02 15:04:05.000-0700' | dateTimeFromSql }}

durationFromIso

Transforms an ISO 8601 duration string into a Duration that can be used with the non-parsing pipes:

{{ 'P2Y4M6D' | durationFromIso }}

durationFromIsoTime

Transforms an ISO 8601 time string into a Duration that can be used with the non-parsing pipes:

{{ '02:04:06.800' | durationFromIsoTime }}

durationFromMilliseconds

Transforms a duration in milliseconds into a Duration that can be used with the non-parsing pipes:

{{ 24000 | durationFromMilliseconds }}

Math

dateTimeEarliest

Selects the earliest (minimum) from a list of DateTimes.

{{ [early, earliest, earlier] | dateTimeEarliest }}

dateTimeLatest

Selects the latest (maximum) from a list of DateTimes.

{{ [late, latest, later] | dateTimeLatest }}

durationLongest

Selects the longest (maximum) from a list of Durations.

{{ [long, longest, longer] | durationLongest }}

durationShortest

Selects the shortest (minimum) from a list of Durations.

{{ [short, shortest, shorter] | durationShortest }}

Time zones and offsets

In general, all time zone and offset operations change the DateTime’s zone but keep the underlying timestamp. For more information, see the Luxon docs.

dateTimeToLocal

Sets the zone of the DateTime to the local zone:

{{ date | dateTimeToLocal }}

dateTimeToUtc

Sets the zone of the DateTime to the Coordinated Universal Time zone:

{{ date | dateTimeToUtc }}

Formatting

dateTimeToFormat

Transforms a DateTime into an arbitrarily formatted string:

{{ date | dateTimeToFormat:'MMMM d, yyyy' }}

dateTimeToLocaleString

Transforms a DateTime into an human-readable, internationalized string:

{{ date | dateTimeToLocaleString:DateTime.DATETIME_FULL }}

{{ date | dateTimeToLocaleString:{
                                    year: 'numeric',
                                    month: 'long',
                                    day: 'numeric',
                                    hour: 'numeric',
                                    minute: '2-digit',
                                    timeZoneName: 'short'
                                  } }}

The pipe takes Intl.DateTimeFormat as a parameter.

dateTimeToIso

Transforms a DateTime into an ISO 8601 date:

{{ date | dateTimeToIso }}

Also available: dateTimeToIsoDate, dateTimeToIsoTime, and dateTimeToIsoWeekDate.

dateTimeToJsDate

Transforms a DateTime into a JavaScript date:

{{ date | dateTimeToJsDate }}

Works with Angular’s DatePipe:

{{ date | dateTimeToJsDate | date:'fullDate' }}

dateTimeToRelative and dateTimeToRelativeCalendar

Transforms a DateTime into a relative time:

{{ date | dateTimeToRelative:{ unit: 'day', style: 'long' } }}
{{ date | dateTimeToRelativeCalendar:{ unit: 'month' } }}

The unit and style parameters are optional.

dateTimeToSql

Transforms a DateTime into an SQL date string:

{{ date | dateTimeToSql }}

durationToFormat

Transforms a Duration into an arbitrarily formatted string:

{{ duration | durationToFormat:'mm:ss.SSS' }}

durationToHuman

Transforms a Duration into a human-readable string with all units included:

{{ duration | durationToHuman }}

durationToIso

Transforms a Duration into an ISO 8601 duration string:

{{ duration | durationToIso }}

durationToIsoTime

Transforms a Duration into an ISO 8601 time string:

{{ duration | durationToIsoTime }}