====== Récupérer une date vers Angular depuis un JSON (service C#) ======
Si on récupère une date depuis un JSON, elle n'est pas convertie automatiquement en un objet date.
Pour cela il faut faire la manipulation suivante :
maDate = (maDate ? new Date(maDate) : null);
traitement sur une liste d’objets :
// fix dates : JSON => Date()
this.rappels.map(curRappel => {
curRappel.date = (curRappel.date ? new Date(curRappel.date) : null);
})
/**
* Convertir une date JSON vers un objet Date JS au fuseau local.
* Interpréter la chaîne JSON comme étant une date uniquement (on force l’heure à 12h pour ne pas avoir la date qui change avec Firefox).
* @param jsonDate : chaîne json de type date/heure UTC (sera convertie en Date locale (à 12h)) ou bien Date (sera copiée et forcée à 12h).
* @returns date locale.
*/
public static jsonUtcDateToLocaleDate(jsonDate: string | Date): Date {
let retVal: Date = null;
if (jsonDate) {
// on veut que la date du JSON qui est un string, soit convertie en Date et interprétée comme étant
// une date UTC => on ne garde que la partie date => les 10 premiers caractères de la chaîne
// source : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Date/parse#format_de_la_cha%C3%AEne_de_caract%C3%A8res
// s’il s’agit bien d’une string
if (jsonDate instanceof String) {
retVal = new Date((jsonDate as string).slice(0, 10));
// s’il s’agit déjà d’une date => on n’a rien à changer
} else {
retVal = new Date(jsonDate as Date);
}
// forcer à 12h car Chrome et Firefox ne décalent pas les heures de la même manière.
retVal.setHours(12, 0, 0, 0);
}
return retVal;
}