Я также искал решение этой проблемы, вот что я в итоге придумал:
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;
}
Вы можете попробовать это здесь: http://jsfiddle.net/B5Zrx/
\ u200E - это какой-то символ форматирования, который я видел в какой-то версии IE (это метка слева направо в юникоде).
Я предполагаю, что если форматированное время содержит что-то вроде «XX: XX: XX», то это должно быть время с секундами, и я удаляю последнюю часть, если я не нахожу этот шаблон, ничего не меняется. Довольно безопасно, но в некоторых странных обстоятельствах есть риск оставить секунды.
Я просто надеюсь, что не существует локали, которая изменила бы порядок форматированных частей времени (например, сделать это ss: mm: hh). Эта метка слева направо заставляет меня немного нервничать по этому поводу, поэтому я не убираю метку справа налево (\ u202E) - я предпочитаю не находить совпадение в этом случае и оставляю время отформатировано с секундами в таком случае.