web-dev-qa-db-ja.com

秒を表示せずに.toLocaleTimeString()を使用するにはどうすればよいですか?

現在、秒を表示せずにユーザーの時間を表示しようとしています。 Javascriptの.toLocaleTimeString()を使用してこれを行う方法はありますか?

このようなことをする:

var date = new Date();
var string = date.toLocaleTimeString();

すべてのユニットでユーザーの時間を表示します。現在、午後3時39分15秒と表示されます。秒なしで、同じ文字列を表示できますか? (例:午後3時39分)

132
javadog36

これに基づいてオプションをいつでも設定できます page 設定して、秒を取り除くために

var dateWithouthSecond = new Date();
dateWithouthSecond.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});

Firefox、Chrome、IE9 +およびOperaでサポートされています。 Webブラウザコンソールで試してください。

261
CJLopez

Date.prototype.toLocaleString によって返される値は実装に依存するため、取得したものを取得します。文字列を解析して秒を削除することもできますが、ブラウザによって異なる場合があるため、使用中のすべてのブラウザを許可する必要があります。

Dateメソッドを使用して、独自の明確な形式を作成することは難しくありません。例えば:

function formatTimeHHMMA(d) {
  function z(n){return (n<10?'0':'')+n}
  var h = d.getHours();
  return (h%12 || 12) + ':' + z(d.getMinutes()) + ' ' + (h<12? 'AM' :'PM');
}
9
RobG

また、この問題の解決策を探していましたが、最終的には次のように思いつきました。

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)を削除しない理由です-この場合、一致するものを見つけず、そのような場合は秒でフォーマットされた時間。

1
ArturG

これを試すことができます。これは私のニーズに合っています。

var d = new Date();
d.toLocaleTimeString().replace(/:\d{2}\s/,' ');

または

d.toLocaleString().replace(/:\d{2}\s/,' ');
1
karma

ロケールの場合:

var date = new Date();
date.toLocaleTimeString('fr-FR', {hour: '2-digit', minute: '2-digit'})
1
Mickael Austoni