4

я хочу, чтобы проверить уаг check_val между два времени вар open_time и вар close_timeКак определить, является ли конкретное время между указанный промежуток времени в JavaScript

var open_time = "23:30"; 
var close_time = "06:30"; 
var check_val ="02:30"; 
if(Date.parse (check_val) > Date.parse (open_time) && Date.parse (check_val) < Date.parse (close_time)){ 
    var flag=1; 
} else { 
    var flag=2 
} 

результат всегда еще часть

+0

ли вы подразумеваете «06:30» - это время следующего дня «23:30»? – naota

ответ

2

Date.parse() принимает даты в RFC2822 или ISO8601 форматов.

В вашем случае он всегда возвращает NaN.

Date.parse("23:30"); // NaN 

Используя соответствующий формат даты работает, как ожидалось:

var open_time = Date.parse("2011-10-09T23:30"); 
var close_time = Date.parse("2011-10-10T06:30"); 
var check_val = Date.parse("2011-10-10T02:30"); 

if(check_val > open_time && check_val < close_time) { 
    var flag=1; 
} else { 
    var flag=2 
} 
0

Если вы просто сравнивая раз и не даты можно просто сделать сравнение строк

if (check_val > open_time && check_val < close_time) 
+1

Это не сработает, потому что '' 02:30 ">" 23:30 "' дает 'false'. – jaho

+0

Ну, это проблема, если вы сравниваете время, а не даты. Как вы определяете, какое время позже? Ваше утверждение означает, что 2.30 - это следующий день, таким образом, позже 23.30, но это может быть легко понято иначе. Это легко проверить: просто оцените, если 'open_time> close_time', а затем переключится на' <' to '> ' – Horen

+1

Вы можете определить его по порядку параметров, но переключающие знаки также не будут работать, например. '23:45"> "23:30" 'дает' true' и все еще находится между двумя часами. – jaho

2

Вы можете создать свой собственный объект, чтобы провести время, а затем написать функцию, которая использует его:

var Time = function(timeString) { 
    var t = timeString.split(":"); 
    this.hour = parseInt(t[0]); 
    this.minutes = parseInt(t[1]); 
    this.isBiggerThan = function(other) { 
     return (this.hour > other.hour) || (this.hour === other.hour) && (this.minutes > other.minutes); 
    }; 
} 

var timeIsBetween = function(start, end, check) { 
    return (start.hour <= end.hour) ? check.isBiggerThan(start) && !check.isBiggerThan(end) 
    : (check.isBiggerThan(start) && check.isBiggerThan(end)) || (!check.isBiggerThan(start) && !check.isBiggerThan(end));  
} 

var openTime = new Time("23:30"); 
var closeTime = new Time("06:30"); 
var checkTime = new Time("02:30"); 

var isBetween = timeIsBetween(openTime, closeTime, checkTime);