javascript - JavaScript 中的解析很麻烦

标签 javascript datetime-parsing

我需要一个函数将文本中的时间从包含日期部分字母的格式转换为数字。 例如。下午 4:15 -> 16:15、凌晨 4:15 -> 凌晨 4:15。目前我有以下解决方案

function formatTime(text){
	var find = '([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9] (AM|PM)';
	
	var reg = new RegExp(find, 'g');
	
	pos = 0;

	var result;
	var formatedText = "";
	while((result = reg.exec(text)) !== null) {
		if(result[2] == "PM"){
			var hours= parseInt(result[0], 10);
			hours = hours + 12;
			var hoursStr = hours.toString();
			var newTime = hoursStr + result[0].substring(result[1].length,result[0].length - 3);
			
			formatedText += newTime;
			pos = reg.lastIndex;
		} else {
			formatedText += text.replace("AM","").substring(pos, reg.lastIndex);
			pos = reg.lastIndex;
		}
	}
	
	if(pos < text.length){
		formatedText += text.substring(pos, text.length);
	}
	
	return formatedText;
}

console.log(formatTime("Some Text (11:00AM - 1:00PM)"));

我制作了很好的案例,例如 console.log(formatTime("一些文本 (11:00AM - 1:00PM)"));

但我努力让它处理 console.log(formatTime("一些文本 (11:00 AM - 1:00 PM)"));

最佳答案

这适用于您的示例。 我已将 \\s? 添加到正则表达式中,并对削减时间的逻辑进行了微小的更改(-2 而不是 -3)。此外,我还将变量定义移至函数的开头,以反射(reflect) JavaScript 中的提升。

function formatTime(text){
    var find = '([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]\\s?(AM|PM)';            
    var reg = new RegExp(find, 'g');            
    var pos = 0;
    var formatedText = "";
    var result, hours, hoursStr, newTime;           

    while ((result = reg.exec(text)) !== null) {
        if (result[2] === "PM") {
            hours= parseInt(result[0], 10);
            hours = hours + 12;
            hoursStr = hours.toString();
            newTime = hoursStr + result[0].substring(result[1].length, result[0].length - 2);

            formatedText += newTime;                    
        } else {
            formatedText += text.replace("AM","").substring(pos, reg.lastIndex);

        }

        pos = reg.lastIndex;
    }

    if (pos < text.length) {
        formatedText += text.substring(pos, text.length);
    }

    return formatedText;
}

关于javascript - JavaScript 中的解析很麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41260280/

相关文章:

javascript - 使用Ext js动态加载项目 "loader"

javascript - 在 Angular 2 中使用 *ngIf 或 *ngSwitchCase 时 View 发生变化

java - DateTimeFormatter 创建模式

c# - 如何将日期时间字符串转换为日期时间对象

c# - 将这种字符串解析为 DateTime - "Friday 22nd March 2013"(C#)

javascript - 如何将过滤后的参数发送到指令

javascript - 切换复选框在 Angular js 中不起作用,它总是显示

javascript - 未捕获的类型错误 : PouchDB is not a constructor

Java:如何从 LocalTime 对象获取总分钟数

python - 使用时区信息正确解析日期字符串