Скрыть Div на время суток

0

У меня есть таймер обратного отсчета Javascript, когда он достигает 0, он отключается, а затем сбрасывается на следующий день. Над ним у меня есть текст "Мы открыты". Я хочу скрыть этот текст, а остальная часть div "areOpen", когда обратный отсчет достигает 0. Проблема, с которой я столкнулся, скрывает div "areOpen".

Веб-сайт

Javascript, чтобы скрыть div 'areOpen'

!function ($) {
// get current time
// get current time
var d = new Date(), 
hours = d.getHours(),
mins = d.getMinutes();
day = d.getDay();   

// if day is mon-Fri and time is between 9am and 5:30pm
if(0 < dday < 7   
&& hours >= 21 
&& (hours < 24 || hours === 24 && mins <= 00)){

$('.wereOpen').hide(); 
};
}

Javascript для обратного отсчета:

if (document.getElementById('countdown')) {
pad = function(n, len) { // leading 0's
    var s = n.toString();
    return (new Array( (len - s.length + 1) ).join('0')) + s;
};
function countDown() {
    var now = new Date();
    if ( (now.getDay() >= 1) && (now.getDay() <= 7) ) { // Monday to Sunday
        var target = 21; // 21:00hrs is the cut-off point
        if (now.getHours() < target) { // don't do anything if we're past the cut-off point
            var hrs = (target - 1) - now.getHours();
            if (hrs < 0) hrs = 0;
            var mins = 59 - now.getMinutes();
            if (mins < 0) mins = 0;
            var secs = 59 - now.getSeconds();
            if (secs < 0) secs = 0;
            var str = pad(hrs, 2) + ':' + pad(mins, 2) + '.<small>' + pad(secs, 2) + '</small>';
            document.getElementById('countdown').innerHTML = str;
        }
    }
}
var timerRunning = setInterval('countDown()', 1000);
}
  • 0
    Какой актуальный вопрос? Вы говорите, у вас проблемы, что это? Вы не можете скрыть div? Неправильный div скрывается? Див скрывается не в то время? Произошла ошибка ...?
  • 0
    Условие 0 < dday < 7 не имеет смысла; кроме dday что dday не определен , рассмотрим следующее 0 < 2 < 2; // true - оно становится (0 < 2) < 2 , поэтому (true) < 2 и +true равно 1 поэтому мы получаем 1 < 2; // true . Кроме того , когда вызывается ваша функция? Дополнительное примечание : рассмотрите возможность использования UTC, поскольку веб-сайты можно просматривать на международном уровне, когда время отличается от местного времени вашего магазина.
Показать ещё 4 комментария
Теги:

2 ответа

1
Лучший ответ

Я просто играл с совершенно другим способом решения "проблемы", и я получил следующее сообщение, поскольку это может быть полезно для вас

var open_times = {
        // day              hh  mm           hh  mm
        Monday:    { open: [ 9, 30], close: [17, 30]},
        Tuesday:   { open: [ 9, 30], close: [17, 30]},
        Wednesday: { open: [ 9, 30], close: [17, 30]},
        Thursday:  { open: [ 9, 30], close: [17, 30]},
        Friday:    { open: [ 9, 30], close: [17, 30]},
        Saturday:  { open: [ 0,  0], close: [ 0,  0]},
        Sunday:    { open: [ 0,  0], close: [ 0,  0]},
    },
    timezone = -(5*60 + 0);

function isOpen() {
    var d = new Date(),
        day, open, close;
    d.setUTCMinutes(d.getUTCMinutes() + timezone);
    day = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][d.getUTCDay()];
    open = open_times[day].open[0] * 3600000 + open_times[day].open[1] * 60000,
    close = open_times[day].close[0] * 3600000 + open_times[day].close[1] * 60000;
    d = +d - (d.setUTCHours(0), d.setUTCMinutes(0), d.setUTCSeconds(0), d);
    if (open <= d && close > d)
        return {open: true, remain: close - d};
    else
        return {open: false, remain: 0};
}

function updateCountDown(ms) {
    var elm = document.getElementById('countdown'),
        ss = pad2(Math.floor(ms / 1000) % 60),
        mm = pad2(Math.floor(ms / 60000) % 60),
        hh = pad2(Math.floor(ms / 3600000) % 24);
    if (elm)
        elm.innerHTML = hh + ':' + mm + '.<small>' + ss + '</small>';
}

function pad2(x) {
    x = '' + x;
    if (x.length === 1) return '0' + x;
    if (x.length === 0) return '00';
    return x;
}

var timerRunning = setInterval(function () {
    var time = isOpen();
    if (time.open) {
        $('.wereOpen').show();
        updateCountDown(time.remain);
    } else
        $('.wereOpen').hide();
}, 1000);
  • 0
    Я разобрался, посмотрев на ваш код. Спасибо!
0

В вашей первой части кода есть несколько неправильных имен переменных, а также некоторые логические ошибки. Согласно вашему комментарию, я скорректировал утверждение if:

if((day === 0 || day === 6)
   || (hours < 9 || (hours >= 17 && mins > 30)))
{
    $('.wereOpen').hide();
}

Это выражение будет выполняться, если день будет днем или воскресеньем, или если время ниже 9 утра или выше 5:30 вечера (время локального браузера).

  • 1
    Как это будет выполняться, если функция, содержащая if , никогда не вызывается?
  • 0
    @Temu Я был немного озадачен тем, что именно он имел в виду в своем вопросе (так же, как и вы), поэтому я просто сделал удар в чем-то, что, как я увидел, было неверным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню