サーバーは次の形式で文字列を送信しています:18:00:00
。これは、日付に依存しない時刻の値です。6:00PM
それをJavascriptで変換する方法は?サーバーから送信された値の文字列として今日の日付を付加し、結合された値を解析して、Dateオブジェクトのメソッドを試すこと.toTimeString()
ができますが、timeメソッドが出力する形式は24時間制で、秒単位です。関数を書くことはできますが、何かが組み込まれていますか?
18 に答える
何も組み込まれていません。私の解決策は次のようになります。
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>
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;
これは、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;
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;
};
この同じ質問を調べていると、いくつかの複雑で理解しにくい解決策に出くわしましたが、それから私は気づきました。読みにくい正規表現やその他の複雑なコードに依存しない非常に単純な解決策があります。明らかな何かが欠けていない限り、これは非常にシンプルで理解しやすいソリューションです。
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