Отображение блоков по расписанию

помогите решить проблему: мне нужно, чтобы на сайте по расписанию с 21:31 до 09:59 скрывался один блок и появлялся другой. В 21:31 блок скрывается, но проблема в том, что в 22:00 он все равно появляется! Я так понимаю, потому что минуты 00 и уже не срабатывает правило >= 30 . Как сделать правильно? Спасибо.

$(function() {
var d = new Date();
var h = d.getHours();
var m = d.getMinutes();

if ((h >= 21 && m >= 30) || (h <= 9  && m <= 59)){
  $('#timeshow').show();
  $('#timehidden').hide();
} else{
  $('#timeshow').hide();
  $('#timehidden').show();
}
});
#timeshow{display:none;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="timeshow">Мы закрыты</div>
<div id="timehidden">Мы открыты</div>


Ответы (2 шт):

Автор решения: Aziz Umarov

Так посмотрите

$(function() {
var d = new Date();
var h = d.getHours();
var m = d.getMinutes();

if ((h == 21 && m >= 30) || (h == 9  && m <= 59) || h > 21 || h < 9){
  $('#timeshow').show();
  $('#timehidden').hide();
} else{
  $('#timeshow').hide();
  $('#timehidden').show();
}
});
#timeshow{display:none;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="timeshow">Мы закрыты</div>
<div id="timehidden">Мы открыты</div>

→ Ссылка
Автор решения: Greg--

Можно сравнить время а не часы отдельно, минуты отдельно

$(function() {
var d = new Date()

var elfrom = new Date()
elfrom.setHours(21,30,0);

var elto = new Date()
elto.setHours(9,59,0);

if(d>=elfrom||d<elto){
  $('#timeshow').show();
  $('#timehidden').hide();
}else{
  $('#timeshow').hide();
  $('#timehidden').show();
}
});
#timeshow{display:none;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="timeshow">Мы закрыты</div>
<div id="timehidden">Мы открыты</div>

→ Ссылка