我有一个像3:35 PM - 5:25 PM
这样的字符串。我正在尝试编写两个函数getStartTime(times)
和getEndTime(times)
,它们以24小时时钟格式返回开始和结束时间,即在上述情况下它将返回15:35
和17:25
。到目前为止,我有一个工作getStartTime(times)
:
function getStartTime(times){
var spaceSplit=times.split(" ");
var colonSplit=times.split(":");
if(s.search("PM")!=-1&&colonSplit[0]<12){
return String(Number(colonSplit[0])+12)+":"+colonSplit[1].substring(0,2);
}
return spaceSplit[0];
}
然而,它很难看,我不知道如何做getEndTime(times)
。有谁知道这两种功能的优雅方式?请注意,字符串将始终采用该格式(尽管小时数可能是两位数)。
答案 0 :(得分:1)
function getStartTime(times)
{
var start_time = times.split("-")[0].trim();
var res = start_time.split(" ");
var hh = res[0].split(":")[0];
var mm = res[0].split(":")[1];
if( res[1]== "PM" && hh !="12")
{
hh = +hh + 12;
}
else if(hh==12 && res[1] == "AM")
{
hh = "00";
}
return(hh+":"+mm);
}
function getEndTime(times)
{
var end_time = times.split("-")[0].trim();
var res = end_time.split(" ");
var hh = res[0].split(":")[0];
var mm = res[0].split(":")[1];
if( res[1]== "PM" && hh !="12")
{
hh = +hh + 12;
}
else if(hh==12 && res[1] == "AM")
{
hh = "00";
}
return(hh+":"+mm);
}
答案 1 :(得分:1)
这可以通过正则表达式轻松完成:
var t = '3:35 PM - 5:25 PM';
console.log(getTimes(t));
function getTimes(timeString) {
var matches = /^([1-9]|1[0-2])(:[0-5][0-9]) ([AP])M - ([1-9]|1[0-2])(:[0-5][0-9]) ([AP])M$/.exec(timeString);
return [parseInt(matches[1]) % 12 + (matches[3] == 'A' ? 0 : 12) + matches[2],
parseInt(matches[4]) % 12 + (matches[6] == 'A' ? 0 : 12) + matches[5]];
}
http://jsfiddle.net/p5xzwuch/1/
编辑:您可以将同一组中的:
与分钟匹配,然后您不必手动插入(“已更正”)。它只是显示另一种方式,如果你不知道空格的数量,那么你可能需要修改一点,这可能不是最快的方法。使用正则表达式的好处是你可以先看看它是否匹配,然后返回结果如图所示,否则你可以处理错误。