2013-12-13 3 views
1

Я использую javaScript для отображения элемента в будние дни и в рабочие часы (с понедельника по пятницу с 08:00 до 16:50).Получить дни недели и определенное время дня

Я использую этот код:

var date = new Date(); 
var thisMin = date.getMinutes(); 
var thisHour = date.getHours(); 
var thisWeekday = date.getDay(); 
// True if Mon - Fri between 08:00 - 16:50 
if (thisWeekday > 0 && thisWeekday < 6 && thisHour > 7 && (thisHour < 17 && thisMin <= 50)) { 
    alert("True"); 
} else { 
    alert("False"); 
} 

- но это лучший способ его код? Это похоже на множество условий, и он работает все время ... Может ли это быть сделано лучше с помощью javaScript?

Fiddle here.

Спасибо.

+0

Ваш условие не выполняется, например, 13:53 - это действительное время, но false предупреждается, вам нужно будет проверить 'thisMinutes <= 50' только если' thisHour === 16'. – user1983983

+0

Хорошо, спасибо. Итак, как же тогда должен выглядеть мой код? – Meek

+0

'thisWeekday> 0 && thisWeekday <6 && thisHour> 7 && (thisHour <16 || (thisHour === 16 && thisMin <= 50))' – user1983983

ответ

2

Обратите внимание, что у вас есть условие с двумя отдельными частями «должны быть в пределах недельного интервала» и «должны быть в пределах временного интервала». Код может отражать это более четко, будучи явным.

Для сравнения времени я бы перекроить текущее время, так что вы можете использовать Date «s <= и >= операторы вместо Переопределение времени сравнения себе:

var startTime = new Date(0, 0, 0, 8, 0); 
var endTime = new Date(0, 0, 0, 16, 50); 
var startWeekday = 1; 
var endWeekday = 5; 

function shouldDisplay() { 
    var d = new Date(); 

    function withinWeekInterval() { 
     return (d.getDay() >= startWeekday && 
       d.getDay() <= endWeekday); 
    } 

    function withinTimeInterval() { 
     var now = new Date(0, 0, 0, d.getHours(), d.getMinutes()); 
     return (now >= startTime && 
       now <= endTime); 
    } 

    return (withinWeekInterval() && withinTimeInterval()); 
} 

Ручной тест:

alert(shouldDisplay()); 
+0

Это выглядит многообещающим. Как использовать эту функцию в инструкции if/else? – Meek

+1

Хорошо, я справился. Большое спасибо. :-) – Meek

0

Try ниже Код:

var date = new Date(); 
var thisMin = date.getMinutes(); 
var thisHour = date.getHours(); 
var thisWeekday = date.getDay(); 
var isSuccess = false; 
// True if Mon - Fri between 08:00 - 16:50 
if (thisWeekday > 0 && thisWeekday < 6 && thisHour > 7 && (thisHour < 17)) { 
    if (thisHour == 16 && thisMin > 50) { 
     isSuccess = false; 
    } else { 
     isSuccess = true; 
    } 
} else { 
    isSuccess = false; 
} 

alert(isSuccess); 
Смежные вопросы