ฉันเคยค้นหาวิธีแก้ไขปัญหานี้นี่คือสิ่งที่ฉันมาในที่สุด:
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) - ฉันไม่ต้องการพบการแข่งขันในกรณีนี้และปล่อยให้ เวลาที่จัดรูปแบบด้วยวินาทีในกรณีเช่นนี้