I have rest service which returns a collection of objects and one of the field of the item is a date string (ISO-8601 format ) and the date value as follows
You may need to create a UTC date from your date with timezone... I assume you are in the pacific timezone as the time is 7 hours from UTC...
Try this code to get a new date object without Timezone (assuming your variable is named "date"):
var datewithouttimezone = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
I used moment.js in this scenario. it worked for me. The angular version is 8
import { Pipe, PipeTransform } from '@angular/core';
import * as moment from 'moment';
@Pipe({
name: 'utcDate'
})
export class UtcDatePipe implements PipeTransform {
transform(value: string): any {
if (!value) {
return '';
}
const dateWithNoTimezone = new Date(moment.utc(value).format());
return dateWithNoTimezone;
}
}
HTML:
<small class="text-muted ml-auto">{{n.createdAt | utcDate | date :'dd/MM/yyyy h:mm a '}}</small>
You can pass another param to date pipe as follows:
{{resultItem.createdDate | date : 'short' : 'UTC'}}
This param can be a timezone like '-0430'
or just 'GMT'
See documentation: https://docs.angularjs.org/api/ng/filter/date
I resolved the issue by adding a custom pipe.
My custom pipe is based on the solution provided by Birwin. Thanks Birwin.
Here is my custom pipe named UtcDate
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'utcDate'
})
export class UtcDatePipe implements PipeTransform {
transform(value: string): any {
if (!value) {
return '';
}
const dateValue = new Date(value);
const dateWithNoTimezone = new Date(
dateValue.getUTCFullYear(),
dateValue.getUTCMonth(),
dateValue.getUTCDate(),
dateValue.getUTCHours(),
dateValue.getUTCMinutes(),
dateValue.getUTCSeconds()
);
return dateWithNoTimezone;
}
}
And I also used default date pipe to format
{{createdDate | utcDate | date:'short'}}