Tôi cũng đã tìm kiếm giải pháp cho vấn đề này, đây là những gì cuối cùng tôi đã nghĩ ra:
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;
}
Bạn có thể dùng thử tại đây: http://jsfiddle.net/B5Zrx/
\ u200E là một số ký tự định dạng mà tôi đã thấy trên một số phiên bản IE (đó là unicode đánh dấu từ trái sang phải).
Tôi giả sử rằng nếu thời gian được định dạng chứa thứ gì đó như "XX: XX: XX" thì đó phải là thời gian bằng giây và tôi xóa phần cuối cùng, nếu tôi không tìm thấy mẫu này, không có gì thay đổi. Khá an toàn, nhưng có nguy cơ để lại vài giây trong một số trường hợp kỳ lạ.
Tôi chỉ hy vọng rằng không có miền địa phương nào có thể thay đổi thứ tự các phần thời gian được định dạng (ví dụ: làm cho nó ss: mm: hh). Dấu từ trái sang phải này khiến tôi hơi lo lắng về điều đó, đó là lý do tại sao tôi không xóa dấu từ phải sang trái (\ u202E) - Tôi không muốn tìm thấy kết quả khớp trong trường hợp này và rời khỏi thời gian được định dạng bằng giây trong trường hợp đó.