problème de date

Le
Une Bévue
j'ai une date en string provenant d'une database :
"2012-10-06 08:48:27 UTC"

sur Safari, Google Chrome et Opera Next, pas de pb, avec le script suivant :
function ISODate2frFR(datetime){
console.log("ISODate2frFR(" + datetime + ")");
var jours =
['dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi'];
var mois =
['janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre'];
var str = "Le ";
var date = new Date(datetime);
console.log("ISODate2frFR(" + datetime + ") -> date = " + date
+ "");
str += jours[date.getDay()] + " ";
str += date.getDate() + " ";
str += mois[date.getMonth()] + " ";
str += date.getFullYear() + " à ";
str += date.getHours() + "H";
var mn = date.getMinutes();
str += (mn<10)? "0" + mn + ":" : mn + ":";
var sÚte.getSeconds();
str += (s<10)? "0" + s : s;
return str;
}

je parvient à convertir cette date en :
"Le samedi 6 octobre 2012 à 10H48:27"
ce qui me semble correct.

Mais Firefox Nightly me donne, pour la même date :
"Le undefined NaN undefined NaN à NaNHNaN:NaN"
c'est parce que le
console.log("ISODate2frFR(" + datetime + ") -> date = " + date + "");
donne :
"ISODate2frFR(2012-10-06 08:48:27 UTC) -> date = Invalid Date"

qu'est-ce qu'il y a d'invalide dans cette date ?
FF ne fonctionnerait pas de la même manière que les autres butineurs
pour la date ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #26331501
Bonjour,

Le 30/12/2014 17:12, Une Bévue a écrit :
j'ai une date en string provenant d'une database :
"2012-10-06 08:48:27 UTC"

[...]

Mais Firefox Nightly me donne, pour la même date :
"Le undefined NaN undefined NaN à NaNHNaN:NaN"
c'est parce que le
console.log("ISODate2frFR(" + datetime + ") -> date = " + date + "");
donne :
"ISODate2frFR(2012-10-06 08:48:27 UTC) -> date = Invalid Date"

qu'est-ce qu'il y a d'invalide dans cette date ?



Les espaces et le "UTC" à la place d'un "T" et d'un "Z".

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15
The format is as follows: YYYY-MM-DDTHH:mm:ss.sssZ

Note : lire la suite de la norme pour les parties optionnelles. Par
exemple, ça fonctionne avec :
var date = new Date("2012-10-06T08:48:27");

FF ne fonctionnerait pas de la même manière que les autres butineurs
pour la date ?



Je pense que rien n'interdit d'accepter des formats non standards, et
les autres butineurs que tu as essayés le font. Mais si tu veux que ça
fonctionne partout il vaut mieux respecter le standard.
Une Bévue
Le #26331523
Le 30/12/14 21:26, Olivier Miakinen a écrit :
Je pense que rien n'interdit d'accepter des formats non standards, et
les autres butineurs que tu as essayés le font. Mais si tu veux que ça
fonctionne partout il vaut mieux respecter le standard.



OK, OK, merci beaucoup.

bon pour l'instant j'ai hacké avec :
datetime = datetime.replace(/ UTC/, "Z").replace(/ /, "T");

mais bon ça ne me satisfait pas car dans ma base de donnée j'ai un time
stamp UTC en iso 8601 et, peut-être, le driver de cette bd en ruby me
donne un Time (objet) et c'est lui qui est converti en
"2014-12-31 05:38:34 UTC"
(sans doute est-ce la méthode #to_s ( équivalent ruby du toString() js)
qui donne ce format au lieu de l'iso 8601)

Bon, finalement j'ai modifié, en ruby, le JSON.generate pour Time :


class Time
def to_json(arg = nil)
return '"' + self.iso8601 + '"'
end
end


ATTENTION, en ruby (suivant
la méthode #iso8601 soit reconnue il faut faire un "require 'time'" avant...

le driver MongoDB en php est plus respectueux des formats...
Publicité
Poster une réponse
Anonyme