236

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

このようなことをする:

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

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

4

12 に答える 12

29

これは私のために働く:

var date = new Date();
var string = date.toLocaleTimeString([], {timeStyle: 'short'});

于 2019-10-11T01:57:44.977 に答える
10

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');
}
于 2013-07-28T22:49:43.370 に答える
3

私もこの問題の解決策を探していましたが、最終的に思いついたのは次のとおりです。

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) - この場合、一致を見つけずにそのままにしておくことを好みますそのような場合、時間は秒でフォーマットされます。

于 2014-04-22T19:27:54.957 に答える
-3

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

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

また

d.toLocaleString().replace(/:\d{2}\s/,' ');
于 2015-10-09T06:56:06.377 に答える
-4

これを行う関数と、説明するコメントを次に示します。

  function displayNiceTime(date){
    // getHours returns the hours in local time zone from 0 to 23
    var hours = date.getHours()
    // getMinutes returns the minutes in local time zone from 0 to 59
    var minutes =  date.getMinutes()
    var meridiem = " AM"

    // convert to 12-hour time format
    if (hours > 12) {
      hours = hours - 12
      meridiem = ' PM'
    }
    else if (hours === 0){
      hours = 12
    }

    // minutes should always be two digits long
    if (minutes < 10) {
      minutes = "0" + minutes.toString()
    }
    return hours + ':' + minutes + meridiem
  }

他の人が指摘したように、 toLocaleTimeString() はブラウザーごとに異なる方法で実装できるため、この方法でより適切に制御できます。

Javascript Date オブジェクトの詳細については、こちらのリソースを参照してください: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

于 2014-01-26T00:55:01.203 に答える
-5

元の質問は、これまで見過ごされていた単純な文字列分割で簡単に答えることができると思います。返される時間はテキスト文字列です。「:」区切り文字で分割し、必要な方法で文字列を再構成するだけです。プラグインや複雑なスクリプトは必要ありません。そしてここに行きます:

var myVar=setInterval(function(){myTimer()},1000);

function myTimer() {
    var d = new Date();
    currentNow = d.toLocaleTimeString();
    nowArray = currentNow.split(':');
    filteredNow = nowArray[0]+':'+nowArray[1];
    document.getElementById("demo").innerHTML = filteredNow;
}
于 2014-10-01T22:37:49.017 に答える