我有这个字符串
var data = "Mon 08:30am - 04:30pm"
我需要这种形式
//expected String remove am pm and convert pm timing into 24 hrs time format
Result = 8:30-16:30
我如何在 Javascript 中使用 Regex 来做到这一点。我尝试使用子字符串,但这不是正确的方法。
我用这个试过,但没有找到正确的方法
var amHourFrom = parseInt(details[0].data.substring(4, 2)));
var amMinuteFrom = parseInt(details[0].data.substring(7,2)));
var pmHourFrom = parseInt(details[0].data.substring(14, 2))); //04
var pmMinuteFrom = parseInt(details[0].data.substring(17,2))); //30
if(details[0].data.substring(19,2)=="pm"){
{pmHourFrom = hourFrom +12; //04+12 = 16
}
var Str= amHourFrom + ":" + amMinuteFrom "-" + pmHourFrom+ ":" + pmMinuteFrom;
var result = Str.replace(/^(?:00:)?0?/, '');
我想用其他方式做
我们可以尝试下面的正则表达式替换方法:
var data = "Mon 08:30am - 04:30pm";
var times = data.replace(/(\d{2}):(\d{2})([ap]m)/g, (m, x, y, z) => z === "am" ? x + ":" + y : "" + (12 + parseInt(x)) + ":" + y)
.match(/\d{2}:\d{2}/g)
.join("-");
console.log(times);
对
replace()
的第一个链式调用通过在 pm
次的情况下增加 12 小时将小时分量转换为 24 小时时间。然后我们找到所有时间匹配项,并在最终字符串输出中通过破折号连接在一起。
假设您想坚持当前的实现(有效,只是代码中有各种错误),这是一个工作版本:
var data = "Mon 08:30am - 04:30pm";
var amHourFrom = parseInt(data.substring(4, 6));
var amMinuteFrom = parseInt(data.substring(7,9));
var pmHourFrom = parseInt(data.substring(14, 16));
var pmMinuteFrom = parseInt(data.substring(17,19));
if(data.substring(19,21)=="pm"){
pmHourFrom += 12;
}
var str= amHourFrom + ":" + amMinuteFrom + "-" + pmHourFrom+ ":" + pmMinuteFrom;
day
名称后的空格)开始分割字符串。-
分割字符串。-
加入它们。这里是演示-
var data = "Mon 08:30am - 04:30pm"
var time = data.slice(4).replace(/ /g, '').split('-');
const convertTime = timeStr => {
const time = timeStr.match(/\d+\:\d+/g).join("")
const modifier = timeStr.match(/[a-z]+/gi).join("");
let [hours, minutes] = time.split(':');
if (hours === '12') {
hours = '00';
}
if (modifier.toLowerCase() === 'pm') {
hours = parseInt(hours, 10) + 12;
}
return `${hours}:${minutes}`;
};
let value1 = convertTime(time[0]) + " - " + convertTime(time[1])
console.log(value1)
如果字符串是动态的,请告诉我。
我目前没有添加 12 的简单和简短的解决方案,但是要使用 Regex 转换数据,您可以使用这个
var result = data.replace(/[^0-9:-]/g, "");
除了括号中的字母外,所有字符都没有替换。