11540 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

Voilà mon problème est le suivant. Sur du traitement de date au format 2014-06-02 00:00:00, mon code est

- OK sur CHROME
- NOk sur FIREFOX et renvoie un undefined et affiche (NaN undefined NaN), le bougre !!!!

Mon code, enfin mon bout de code qui pose un problème est le suivant:
var oData = {};
var oDate = new Date();
for (var i=0; i<dataSQL.length; i++)
{   oDate = new Date(dataSQL[i]["DATEDEB"]);
    oData[dataSQL[i]["IDSESSION"]] = dataSQL[i]["LIBELLE"]+ " - " + dataSQL[i]["DESCRIPT"]+ " du " + oDate.toFrFormat();
 }

avec nouveau prototypage de l'objet Date:
Date.prototype.toFrFormat = function ()
{
    var tMois = ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"];
    var jourMois = this.getDate();
    if (jourMois < 10)
    {
            jourMois = "0" + jourMois;	
    }
    var dateFr = jourMois + " " + tMois[this.getMonth()] + " " + this.getFullYear();
    return dateFr;
};


Je vous remercie pour toutes vos suggestions !!! Smiley cligne [/i][/i][/i][/i]
Modifié par informer (17 Jun 2014 - 17:38)
Modérateur
Bonjour,

La date à fournir doit être "2014-06-02T00:00:00" et non pas "2014-06-02 00:00:00".

Si "2014-06-02 00:00:00" marche avec Chrome, c'est un coup de chance.

Amicalement,
Bonjour Parsimonhi,

Par contre je ne comprends pas pourquoi des données enregistrées correctement au format DateTime dans MySQL pose un problème de compatibilité lors de son traitement en JS. Smiley biggol

Donc si code un truc du genre
 oDate = new Date( tDate.replace( /(\d{9})(\d{8}))/, "/$1T/$2") );
ça devrait marcher

Merci par avance de m'éclairer sur ce point et pour toute tes précédentes réponses

Cordialement Smiley cligne
.
Modifié par informer (18 Jun 2014 - 07:43)
Modérateur
Bonjour,

Des formats de date, y en a plein (des dizaines, peut-être des centaines). Celui de mySQL en est un parmi d'autres (il s'appelle le "ODBC Canonical" me semble-t-il, mais c'est à vérifier). Celui dont tu as besoin dans js s'appelle "ISO8601".

Tu peux convertir du "ODBC canonical" en "ISO8601" à plusieurs endroits dans ton code. On peut le faire directement dans la requête SQL. Si l'on suppose que tu utilises mySQL, que ta table s'appelle "MATABLE" et que le champ qui est au format DateTime s'appelle "MADATE", la requête peut être par exemple :

SELECT DATE_FORMAT(MADATE, '%Y-%m-%dT%h:%i:%s') FROM `MATABLE` WHERE 1

A adapter selon tes besoins.

Si tu préfères faire la conversion dans js, il me semble qu'il suffit de remplacer l'espace par un T :

oDate = new Date( tDate.replace( /\s/, "T") );

Note enfin que ce que tu essaies de faire avec la méthode toFrFormat() pour l'objet date existe déjà en js sur les navigateurs récents. Il suffit d'utiliser la méthode toLocaleDateString() paramétrée convenablement.

Du coup, ton code pourrait être simplement :


var oData = {};
var oDate = new Date();
var options = {year: "numeric", month: "long", day: "numeric"};
for (var k=0; k<dataSQL.length; k++)
{
	oDate = new Date(dataSQL[k]["DATEDEB"].replace(/\s/,"T");
	oData[dataSQL[k]["IDSESSION"]] = oDate.toLocaleDateString("fr-FR",options);
}


Amicalement,
Parsimonhi,

Merci beaucoup pour ton aide et la qualité de tes réponses!

Je vais de ce pas remplacer mon code par le tien Smiley lolol

Encore merci Parsimonhi Smiley clapclap