Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save arcturuscom/393d358838d97661df80cf5f08f306b9 to your computer and use it in GitHub Desktop.
Save arcturuscom/393d358838d97661df80cf5f08f306b9 to your computer and use it in GitHub Desktop.
An Angular (> 4.3) interceptor to parse dates from server response.
import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpErrorResponse, HttpResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/do';
@Injectable()
export class AngularDateHttpInterceptor implements HttpInterceptor {
// Migrated from AngularJS https://raw.githubusercontent.com/Ins87/angular-date-interceptor/master/src/angular-date-interceptor.js
iso8601 = /^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(\.\d+)?(([+-]\d\d:\d\d)|Z)?$/;
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).do((event: HttpEvent<any>) => {
if (event instanceof HttpResponse) {
const body = event.body;
this.convertToDate(body);
}
}, (err: any) => {
if (err instanceof HttpErrorResponse) {
if (err.status === 401) {
}
}
});
}
convertToDate(body) {
if (body === null || body === undefined) {
return body;
}
if (typeof body !== 'object') {
return body;
}
for (const key of Object.keys(body)) {
const value = body[key];
if (this.isIso8601(value)) {
body[key] = new Date(value);
} else if (typeof value === 'object') {
this.convertToDate(value);
}
}
}
isIso8601(value) {
if (value === null || value === undefined) {
return false;
}
return this.iso8601.test(value);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment