J'ai également cherché une solution à ce problème, voici ce que j'ai finalement trouvé :
function getTimeStr() {
var dt = new Date();
var d = dt.toLocaleDateString();
var t = dt.toLocaleTimeString();
t = t.replace(/\u200E/g, '');
t = t.replace(/^([^\d]*\d{1,2}:\d{1,2}):\d{1,2}([^\d]*)$/, '$1$2');
var result = d + ' ' + t;
return result;
}
Vous pouvez l'essayer ici : http://jsfiddle.net/B5Zrx/
\u200E est un caractère de formatage que j'ai vu sur certaines versions d'IE (c'est une marque unicode de gauche à droite).
Je suppose que si l'heure formatée contient quelque chose comme "XX:XX:XX", alors il doit s'agir d'une heure avec des secondes et je supprime la dernière partie, si je ne trouve pas ce modèle, rien n'est modifié. C'est assez sûr, mais il y a un risque de laisser des secondes dans certaines circonstances bizarres.
J'espère simplement qu'il n'y a pas de paramètres locaux qui changeraient l'ordre des parties de l'heure formatées (par exemple en faisant ss:mm:hh). Cette marque de gauche à droite me rend un peu nerveux à ce sujet, c'est pourquoi je ne supprime pas la marque de droite à gauche ( \u202E ) - Je préfère ne pas trouver de correspondance dans ce cas et laisser l'heure formatée en secondes dans ce cas.