简体   繁体   中英

Javascript time between 08:30 - 20:00

I am trying to make a message show between certain time ranges in a day but i cant make it work it either shows the first IF or doesnt show anything at all with an error i cant seem to figure out. what am i doing wrong?

var today = new Date();
var hour = today.getHours();
var minute = today.getMinutes();

if(today.getDay() == 4){
        if(hour > 8 && minute > 30 || hour < 20){
            document.getElementById('test').innerHTML = ('come today till 20:00');
        } else if (hour > 20 && hour < 0){
            document.getElementById('test').innerHTML = ('Come tomorrow till 20:00');
        } else (hour > 0 && hour < 8).document.getElementById('test').innerHTML = ('Come today from 08:00 till 20:00');
    }

figured it out thanks for the help guys :) this is how it works now.

        if(today.getDay() == 4){
        if((hour === 8 && minute > 30 || hour > 8) && hour < 20){
            document.getElementById('test').innerHTML = ('Kom vandaag langs in onze showtuin tot 20:00 uur donderdag');
        } else if (hour >= 20 && hour < 24){
            document.getElementById('test').innerHTML = ('Kom morgen langs in onze showtuin tot 20:00 uur');
        } else{
            document.getElementById('test').innerHTML = ('Kom vandaag langs in onze showtuin van 08:00 tot 20:00 donderdag');
        }
    }

You could simplify the conditions a bit, with checking from small values to greater values, like

if (today.getDay() == 4) {
    if (hour < 8) {
        document.getElementById('test').innerHTML = 'Come today from 08:00 till 20:00';
    } else if (hour < 20) {
        document.getElementById('test').innerHTML = 'Come today till 20:00';
    } else if (hour < 24) {
        document.getElementById('test').innerHTML = 'Come tomorrow till 20:00';
    }
}

Working with absolute minute may become simplier:

var today = new Date();
var crtminut = ((today/60000).toFixed(0)-today.getTimezoneOffset())%1440;
var minmin = 8*60+30;
var minmax = 20*60;

if (today.getDay() == 4) {
    if ((minmin <= crtminut) && (crtminut < minmax)) {
        ... inner period
    } else {
        ... outer period
    }
}

Each if can use the previous condition to its advantage which means if you correctly sort the conditions you can make it really simple:

if (hour >= 20) {
    //20:00 - 23:59
}
else if (hour > 8) {
    //9:00 - 19:59
}
else if (hour == 8 && minute >= 30) {
    //8:30 - 8:59
}
else {
    //0:00 - 8:29
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM