サーバーは、次の形式で文字列を送信しています: 18:00:00
。これは、日付に依存しない時刻の値です。これを6:00PM
Javascript で に変換するにはどうすればよいでしょうか。サーバーから送信された値の先頭に今日の日付を文字列として追加し、結合した値を解析してから、.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>