在JavaScript中解析繁琐的时间

时间:2016-12-21 10:14:09

标签: javascript datetime-parsing

我需要一个函数将文本中的时间从带有日期部分字母的格式转换为数字。 例如。下午4:15 - > 16:15,4:15 AM - >凌晨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(“Some Text(11:00 AM - 1:00 PM)”));

但是我努力使它成为过程 console.log(formatTime(“Some Text(11:00 AM - 1:00 PM)”));

2 个答案:

答案 0 :(得分:1)

这适用于您的示例。 我已将\\s?添加到正则表达式中,并对切割时间的逻辑进行了微小的更改(-2而不是-3)。此外,我已将变量定义移动到函数的开头,以反映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;
}

答案 1 :(得分:0)

这是一种更简单的方法:只使用两个功能。一个用于转换小时数,另一个用于匹配#Rectangle-3次和#Rectangle-2次幂。

容易做到......

&#13;
&#13;
#Rectangle-3
&#13;
&#13;
&#13;