2015-05-17 2 views
0

У меня есть строка, подобная этой 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

Поиск «от 12 часов до 24 часов преобразования» или что-то подобное, затем просто разбить строку и преобразовать каждый раз. – adeneo

+1

Если это работает в первый раз, почему бы просто не разбить строку на «-», а затем отправить две части через эту функцию по одному за раз – Steve

+0

Если это абсолютно в этом формате, вы все время можете использовать этот шаблон регулярного выражения http: //regexr.com/3b11b - подстановки $ 1 - время начала, $ 2 - AM или PM, $ 3 - время окончания, $ 4 - AM или PM – zfrisch

ответ

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); 
} 
+0

Это не правильное преобразование, вы закончили с 24:01 в 12:01, что на самом деле 0:01 – maraca

+0

oops .... забыли в этом случае .. –

+0

@maraca 12:01 PM должно быть 12:00, но за 12:01 оно должно быть 00:01 –

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/

Edit: Вы можете соответствовать : в одной группе с протоколом, то вам не нужно вставить он вручную («исправлен»). Это просто показывает другой способ, если вы не знаете количество пробелов, то вам, возможно, придется немного изменить, и это, вероятно, не самый быстрый способ. Хорошо использовать регулярное выражение, вы можете сначала увидеть, совпадает ли оно, и только затем вернуть результат, как показано, иначе вы можете обработать ошибку.