J'ai un service de repos qui renvoie une collection d'objets et l'un des champs de l'article est une chaîne de date (format ISO-8601) et la valeur de date comme suit
"createdDate": "2017-02-21T12: 56: 50.907",
Dans l'interface angular4, j'ai mis DatePipe pour formater la date ci-dessus
{{resultItem.createdDate| date:'short'}}
et je me trompe de conversion comme suit
21/02/2017, 07:56
au lieu de
21/02/2017, 0:56 AM
Vous devrez peut-être créer une date UTC à partir de votre date avec le fuseau horaire ... Je suppose que vous êtes dans le fuseau horaire du Pacifique car l'heure est à 7 heures de l'UTC ...
Essayez ce code pour obtenir un nouvel objet date sans fuseau horaire (en supposant que votre variable est nommée "date"):
var datewithouttimezone = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
J'ai résolu le problème en ajoutant un tuyau personnalisé.
Ma pipe personnalisée est basée sur la solution fournie par Birwin. Merci Birwin.
Voici ma pipe personnalisée nommée 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;
}
}
Et j'ai également utilisé le tube de date par défaut pour formater
{{createdDate | utcDate | date:'short'}}
Vous pouvez passer un autre paramètre à ce jour comme suit:
{{resultItem.createdDate | date: 'courte': 'UTC'}}
Ce paramètre peut être un fuseau horaire comme '-0430'
ou juste 'GMT'
Voir la documentation: https://docs.angularjs.org/api/ng/filter/date