Saya juga sudah mencari solusi untuk masalah ini, inilah yang akhirnya saya dapatkan:
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;
}
Anda dapat mencobanya di sini: http://jsfiddle.net/B5Zrx/
\ u200E adalah beberapa karakter pemformatan yang pernah saya lihat pada beberapa versi IE (ini adalah tanda unicode kiri-ke-kanan).
Saya berasumsi bahwa jika waktu yang diformat berisi sesuatu seperti "XX: XX: XX" maka itu harus waktu dengan detik dan saya menghapus bagian terakhir, jika saya tidak menemukan pola ini, tidak ada yang berubah. Cukup aman, tetapi ada risiko meninggalkan detik dalam beberapa keadaan aneh.
Saya hanya berharap bahwa tidak ada lokal yang akan mengubah urutan bagian waktu yang diformat (misalnya membuatnya ss: mm: hh). Tanda kiri-ke-kanan ini membuat saya sedikit gugup tentang itu, itu sebabnya saya tidak menghapus tanda kanan-ke-kiri (\ u202E) - Saya lebih suka tidak menemukan kecocokan dalam kasus ini dan meninggalkan waktu diformat dengan detik dalam kasus tersebut.