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; }