服务器正在发送以下格式的字符串:18:00:00
. 这是一个独立于任何日期的时间值。如何将其转换为6:00PM
Javascript?我可以将今天的日期作为字符串添加到服务器发送的值中,然后解析组合值,然后尝试.toTimeString()
Date 对象的方法,但 time 方法发出的格式是 24 小时制和秒块。我可以写一个函数,但是有内置的东西吗?
Javascript:使用 AM/PM 将 24 小时制时间字符串转换为 12 小时制,没有时区
IT技术
javascript
time-format
2021-01-30 15:37:06
6个回答
没有内置,我的解决方案如下:
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;
toLocaleTimeString() 使这非常简单。没有必要再自己做这件事了。如果你不使用字符串方法攻击日期,你会更快乐,活得更久。
const timeString = '18:00:00'
// Append any date. Use your birthday.
const timeString12hr = new Date('1970-01-01T' + timeString + 'Z')
.toLocaleTimeString('en-US',
{timeZone:'UTC',hour12:true,hour:'numeric',minute:'numeric'}
);
document.getElementById('myTime').innerText = timeString12hr
<h1 id='myTime'></h1>
基于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;
};
简短的 ES6 代码
const convertFrom24To12Format = (time24) => {
const [sHours, minutes] = time24.match(/([0-9]{1,2}):([0-9]{2})/).slice(1);
const period = +sHours < 12 ? 'AM' : 'PM';
const hours = +sHours % 12 || 12;
return `${hours}:${minutes} ${period}`;
}
const convertFrom12To24Format = (time12) => {
const [sHours, minutes, period] = time12.match(/([0-9]{1,2}):([0-9]{2}) (AM|PM)/).slice(1);
const PM = period === 'PM';
const hours = (+sHours % 12) + (PM ? 12 : 0);
return `${('0' + hours).slice(-2)}:${minutes}`;
}