55

サーバーは次の形式で文字列を送信しています:18:00:00。これは、日付に依存しない時刻の値です。6:00PMそれをJavascriptで変換する方法は?サーバーから送信された値の文字列として今日の日付を付加し、結合された値を解析して、Dateオブジェクトのメソッドを試すこと.toTimeString()ができますが、timeメソッドが出力する形式は24時間制で、秒単位です。関数を書くことはできますが、何かが組み込まれていますか?

4

18 に答える 18

121

何も組み込まれていません。私の解決策は次のようになります。

function tConvert (time) {
  // Check correct time format and split into components
  time = time.toString ().match (/^([01]\d|2[0-3])(:)([0-5]\d)(:[0-5]\d)?$/) || [time];

  if (time.length > 1) { // If time format correct
    time = time.slice (1);  // Remove full string match value
    time[5] = +time[0] < 12 ? 'AM' : 'PM'; // Set AM/PM
    time[0] = +time[0] % 12 || 12; // Adjust hours
  }
  return time.join (''); // return adjusted time or original string
}

tConvert ('18:00:00');

この関数は、正規表現を使用して時間文字列を検証し、それを構成要素に分割します。また、時間の秒はオプションで省略できることにも注意してください。有効な時刻が表示された場合は、AM / PM表示を追加し、時刻を調整することで調整されます。

戻り値は、有効な時間が提示された場合の調整された時間、または元の文字列です。

実例

(function() {

  function tConvert(time) {
    // Check correct time format and split into components
    time = time.toString().match(/^([01]\d|2[0-3])(:)([0-5]\d)(:[0-5]\d)?$/) || [time];

    if (time.length > 1) { // If time format correct
      time = time.slice(1); // Remove full string match value
      time[5] = +time[0] < 12 ? 'AM' : 'PM'; // Set AM/PM
      time[0] = +time[0] % 12 || 12; // Adjust hours
    }
    return time.join(''); // return adjusted time or original string
  }

  var tel = document.getElementById('tests');

  tel.innerHTML = tel.innerHTML.split(/\r*\n|\n\r*|\r/).map(function(v) {
    return v ? v + ' => "' + tConvert(v.trim()) + '"' : v;
  }).join('\n');
})();
<h3>tConvert tests : </h3>
<pre id="tests">
  18:00:00
  18:00
  00:00
  11:59:01
  12:00:00
  13:01:57
  24:00
  sdfsdf
  12:61:54
</pre>

于 2012-12-16T05:54:06.710 に答える
45

AM/PM を取得するには、時間の部分が 12 未満の場合は AM、そうでない場合は PM を確認します。

時間を取得するには、 を実行します(hour % 12) || 12

これはそれを行う必要があります:

var timeString = "18:00:00";
var H = +timeString.substr(0, 2);
var h = H % 12 || 12;
var ampm = (H < 12 || H === 24) ? "AM" : "PM";
timeString = h + timeString.substr(2, 3) + ampm;

http://jsfiddle.net/Skwt7/4/

これは、AM 時間が次のようにフォーマットされていることを前提としてい08:00:00ます。先頭のゼロなしでフォーマットされている場合は、最初のコロンの位置をテストする必要があります。

var hourEnd = timeString.indexOf(":");
var H = +timeString.substr(0, hourEnd);
var h = H % 12 || 12;
var ampm = (H < 12 || H === 24) ? "AM" : "PM";
timeString = h + timeString.substr(hourEnd, 3) + ampm;

http://jsfiddle.net/Skwt7/3/

于 2012-12-16T03:59:25.683 に答える
12

gilly3の回答に基づいています。

変換する場合:

 08:00 to 08:00 AM 
 16:00 to 04:00 PM

次に、これは機能します:

function tConv24(time24) {
  var ts = time24;
  var H = +ts.substr(0, 2);
  var h = (H % 12) || 12;
  h = (h < 10)?("0"+h):h;  // leading 0 at the left for 1 digit hours
  var ampm = H < 12 ? " AM" : " PM";
  ts = h + ts.substr(2, 3) + ampm;
  return ts;
};

https://jsfiddle.net/fpjs9g0L/

于 2016-11-30T21:35:23.673 に答える
5

この同じ質問を調べていると、いくつかの複雑で理解しにくい解決策に出くわしましたが、それから私は気づきました。読みにくい正規表現やその他の複雑なコードに依存しない非常に単純な解決策があります。明らかな何かが欠けていない限り、これは非常にシンプルで理解しやすいソリューションです。

function timeTo12HrFormat(time)
{   // Take a time in 24 hour format and format it in 12 hour format
    var time_part_array = time.split(":");
    var ampm = 'AM';

    if (time_part_array[0] >= 12) {
        ampm = 'PM';
    }

    if (time_part_array[0] > 12) {
        time_part_array[0] = time_part_array[0] - 12;
    }

    formatted_time = time_part_array[0] + ':' + time_part_array[1] + ':' + time_part_array[2] + ' ' + ampm;

    return formatted_time;
}



var time = timeTo12HrFormat(18:00:00);
console.log(time);  // 6:00:00 PM
于 2015-10-11T05:29:12.350 に答える