Ich habe auch nach einer Lösung für dieses Problem gesucht. Folgendes habe ich mir schließlich ausgedacht:
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;
}
Sie können es hier versuchen: http://jsfiddle.net/B5Zrx/
\ u200E ist ein Formatierungszeichen, das ich in einer IE-Version gesehen habe (es ist eine Unicode-Markierung von links nach rechts).
Ich gehe davon aus, dass, wenn die formatierte Zeit etwas wie "XX: XX: XX" enthält, es Zeit mit Sekunden sein muss und ich den letzten Teil entferne. Wenn ich dieses Muster nicht finde, wird nichts geändert. Ziemlich sicher, aber es besteht die Gefahr, dass unter seltsamen Umständen Sekunden verbleiben.
Ich hoffe nur, dass es kein Gebietsschema gibt, das die Reihenfolge der formatierten Zeitteile ändern würde (z. B. ss: mm: hh). Diese Markierung von links nach rechts macht mich allerdings etwas nervös, deshalb entferne ich die Markierung von rechts nach links (\ u202E) nicht - ich ziehe es vor, in diesem Fall keine Übereinstimmung zu finden und die zu verlassen Zeit in diesem Fall mit Sekunden formatiert.