Javascript: 24 時間制の時刻文字列を AM/PM 付きでタイムゾーンなしの 12 時間制に変換する 質問する

Javascript: 24 時間制の時刻文字列を AM/PM 付きでタイムゾーンなしの 12 時間制に変換する 質問する

サーバーは、次の形式で文字列を送信しています: 18:00:00。これは、日付に依存しない時刻の値です。これを6:00PMJavascript で に変換するにはどうすればよいでしょうか。サーバーから送信された値の先頭に今日の日付を文字列として追加し、結合した値を解析してから、.toTimeString()Date オブジェクトの メソッドを試すことができますが、time メソッドが発行する形式は、秒のチャンクを含む 24 時間制です。関数を作成することもできますが、何かが組み込まれているのでしょうか。

ベストアンサー1

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

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>

おすすめ記事