v-borgomotov
@v-borgomotov
Молодой креативный специалист

Как добавить/убрать класс по местному времени?

Всем добрый день. Как добавить/убрать класс у элемента по местному времени. К примеру с 22:00 до 09:00 - добавлен класс disable, а с 09:00 до 22:00 visible. Можно ли так сделать? Если да, то как. Наведите на мысли
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Нужно раз в сколько-то секунд проверять текущее время браузера и ставить классы, в зависимости от часа.

По-хорошему, не нужно при каждой проверке убирать-ставить классы, когда они и так стоят, поэтому код чуть усложняется добавлением текущего состояния state:
(function($el) {
    
    var state, timer;
    
    function checkTime() {
        var h = (new Date).getHours(), state_prev = state;
        state = ( h >= 9 && h < 22) ? 'DAY' : 'NIGHT';
        
        if( state_prev !== state) { // только что изменился статус
            if( state === 'DAY') $el.removeClass('disable').addClass('visible');
            else if( state === 'NIGHT') $el.addClass('disable').removeClass('visible');
        }
    }

    checkTime(); // вызвать один раз сразу же
    
    timer = window.setInterval(checkTime, 10000); // раз в 10 секунд перепроверять
})(

    $('.opened') // jQuery-выборка элементов, которым переключать класс

);


Неоптимальная плохая версия, но покороче:
var $el = $('.opened'); // jQuery-выборка элементов, которым переключать класс
window.setInterval( function() {
    var h = (new Date).getHours(); // текущий час по локальному времени
    if( h >= 9 && h < 22) $el.removeClass('disable').addClass('visible'); // кабак открыт
    else $el.addClass('disable').removeClass('visible'); // кабак закрыт
}, 10000); // раз в 10 секунд перепроверять
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Krasnodar_etc
@Krasnodar_etc
fundraiseup
Сергей очень хороший вариант предложил, но я просто не могу не сказать - чисто субъективно - что запускать это всё каждые 10 секунд - зло. Особенно, если меняется что-либо существенное. Я бы делал проверку только по document.ready
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы