私もこの問題の解決策を探していましたが、最終的に思いついたのは次のとおりです。
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) - この場合、一致を見つけずにそのままにしておくことを好みますそのような場合、時間は秒でフォーマットされます。