Angular2 date pipe does not work in IE 11 and edge 13/14 Angular2 date pipe does not work in IE 11 and edge 13/14 angular angular

Angular2 date pipe does not work in IE 11 and edge 13/14


UPDATE - The Angular issue that causes this issue is resolved in Angular 5. If you can, I would recommend using that to avoid this problem.

If you are still using Angular 4 or older - as a workaround, I created a pipe to use the moment formatter instead of the Angular built-in one:

import { Pipe, PipeTransform } from '@angular/core';import * as moment from 'moment';@Pipe({    name: 'datex'})export class DatexPipe implements PipeTransform {    transform(value: any, format: string = ""): string {        // Try and parse the passed value.        var momentDate = moment(value);        // If moment didn't understand the value, return it unformatted.        if (!momentDate.isValid()) return value;        // Otherwise, return the date formatted as requested.        return momentDate.format(format);    }}

Which can then be used:

{{exampleDate | datex:'DD/MM/YYYY HH:mm:ss'}}

The date you pass in should be something which moment can parse (see the relevant moment documentation) and the format string is a moment, not angular, date formatting string, as documented here.

I've tested this in IE11, Chrome and Firefox and it behaves consistently.

You'll need to ensure moment is added to your package.json as a dependency, e.g.:

{  "name": "demo",  "version": "0.0.1",  // snip  "dependencies": {    // snip    "moment": "^2.15.1",    // snip  },  "devDependencies": {    //snip  }}

... and ensure your systemjs.config.js is updated so it can locate moment:

map: {   'moment': 'npm:moment' } packages: {   moment: { main: './moment.js', defaultExtension: 'js' } }


From Angular2 DatePipe API Documentation.

"this pipe uses the Internationalization API. Therefore it is only reliable in Chrome and Opera browsers.


If you are okay with showing AM/PM instead of 24 hour time, another valid workaround is to break the formatting into two, and use shortTime or mediumTime for displaying the time portion:

{{dto.LastExecution | date:'yyyy-MM-dd'}} {{dto.LastExecution | date:'shortTime'}}

This should work in all major browsers, including IE and Edge.