Я також шукав рішення цієї проблеми, ось що я врешті-решт придумав:
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 (це знак Unicode зліва направо).
Я припускаю, що якщо відформатований час містить щось на кшталт "XX: XX: XX", тоді він повинен пройти час із секундами, і я видаляю останню частину, якщо я не знайду цю схему, нічого не зміниться. Досить безпечно, але є ризик залишити секунди за якихось дивних обставин.
Я просто сподіваюся, що не існує локалі, який би змінив порядок форматованих часових частин (наприклад, зроби це ss: mm: hh). Ця позначка зліва направо змушує мене нервувати з цього приводу, тому я не знімаю позначку справа наліво (\ u202E) - я вважаю за краще не знайти відповідність у цьому випадку і залишити час у такому випадку відформатований секундами.