在时间字符串中添加小时数

时间:2015-05-17 20:34:30

标签: javascript

我有一个像3:35 PM - 5:25 PM这样的字符串。我正在尝试编写两个函数getStartTime(times)getEndTime(times),它们以24小时时钟格式返回开始和结束时间,即在上述情况下它将返回15:3517: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)。有谁知道这两种功能的优雅方式?请注意,字符串将始终采用该格式(尽管小时数可能是两位数)。

2 个答案:

答案 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/

编辑:您可以将同一组中的:与分钟匹配,然后您不必手动插入(“已更正”)。它只是显示另一种方式,如果你不知道空格的数量,那么你可能需要修改一点,这可能不是最快的方法。使用正则表达式的好处是你可以先看看它是否匹配,然后返回结果如图所示,否则你可以处理错误。