2014-12-11 2 views
0

У меня есть startTime и endTime и current_time, как проверить, находится ли текущее время между этими двумя временами или нет?Как проверить, находится ли Текущее время между двумя заданными TImes?

Я попытался следующие:

var startTime = '08:27 PM'; 
var endTime = '09:31 PM'; 
var curr_time = getval(); 

if (curr_time > startTime && curr_time < endTime) { 
    alert("No") 
} else { 
    alert('Yes'); 
} 

function getval() { 
    var currentTime = new Date() 
    var hours = currentTime.getHours() 
    var minutes = currentTime.getMinutes() 
    if (minutes < 10) minutes = "0" + minutes; 
    var suffix = "AM"; 
    if (hours >= 12) { 
     suffix = "PM"; 
     hours = hours - 12; 
    } 
    if (hours == 0) { 
     hours = 12; 
    } 
    var current_time = hours + ":" + minutes + " " + suffix; 
    return current_time; 
} 

Но всегда идет только в Да состоянии.

Может кто-нибудь, пожалуйста, помогите мне, как решить эту проблему?

Это мой jsfiddle

http://jsfiddle.net/j4eb3xa7/2/

+0

«if (curr_time> startTime || curr_time

+0

Нет. Вы ошибаетесь. Что, если curr_time - 21:30? – dosdebug

+0

Будет ли кто-то внимательным объяснять, почему этот вопрос проголосовали? – dosdebug

ответ

3

Попробуйте этот код .. Этот код преобразует время 12 ч до 24 ч времени.

var startTime = '12:27 PM'; 
    var endTime = '12:36 PM'; 

    var curr_time = getval(); 

    if (get24Hr(curr_time) > get24Hr(startTime) && get24Hr(curr_time) < get24Hr(endTime)) { 
     //in between these two times 
     alert("Yes") 
    } else { 
     alert('No'); 
    } 

    function get24Hr(time){ 
     var hours = Number(time.match(/^(\d+)/)[1]); 
     var AMPM = time.match(/\s(.*)$/)[1]; 
     if(AMPM == "PM" && hours<12) hours = hours+12; 
     if(AMPM == "AM" && hours==12) hours = hours-12; 

     var minutes = Number(time.match(/:(\d+)/)[1]); 
     hours = hours*100+minutes; 
     console.log(time +" - "+hours); 
     return hours; 
} 

    function getval() { 
    var currentTime = new Date() 
    var hours = currentTime.getHours() 
    var minutes = currentTime.getMinutes() 

    if (minutes < 10) minutes = "0" + minutes; 

    var suffix = "AM"; 
    if (hours >= 12) { 
     suffix = "PM"; 
     hours = hours - 12; 
    } 
    if (hours == 0) { 
     hours = 12; 
    } 
    var current_time = hours + ":" + minutes + " " + suffix; 

    return current_time; 

    } 

Попробуйте здесь: http://jsfiddle.net/jamesmalvi/2f60pye4/

+0

спасибо. Я думал, что это было прямое сравнение – Pawan

0

Поэтому я добавил две функции, первые превращает любое нормальное время в военное время:

function makeMilitary(string) { 
    if (string.substr(-2) === "PM" && string.substr(0, 2) < 12) 
    { 
     var hour = parseInt(string.substr(0, 2)); 
     string = hour + 12 + string.substr(2); 
    } 
    else if (string.substr(-2) === "AM" && string.substr(0, 2) == 12) 
    { 
     string = "00" + string.substr(2); 
    } 
    return string; 
} 

Вторые использует первый для запуска преобразования, конца, и текущие по военному времени, а затем сравнивает их:

function compare(start, end, current) { 
    start = makeMilitary(start); 
    end = makeMilitary(end); 
    current = makeMilitary(current); 

    if (start < end) // both times are in the same day 
    { 
     return current > start && current < end ? true : false; 
    } 
    else // the end time is on the day after the start time 
    { 
     return current > start || current < end ? true : false; 
    } 
} 

Он даже обрабатывает корпус где время начала - в конце одного дня, а время окончания - в начале следующего.

Вот JSFiddle

0

Вы должны использовать целые значения для переменных CURRENT_TIME, и начальное время Конечное время. Также используйте OR вместо AND в вашем операторе if.

Смежные вопросы