[英]Javascript if for various days and hours
我需要将一个javascript函数设置为仅运行这些日/小时组合-周日(无),周一(4-5,8-23),周二至周四(0-5,8-23),周五(0- 5,8-21),周六(1-3,8-12,16)。
这是正确的“如果”陈述吗?
var date = new Date();
var hour = date.getHours();
var day = date.getDay();
if (
(day !== 0) ||
(day == 1 &&
(hour == 4 || hour == 5 || hour > 7) ) ||
(day > 1 && day < 6 &&
(hour !== 6 && hour !==7) ) ||
(day == 5 &&
(hour !== 22 && hour !== 23) ) ||
(day == 6 &&
(hour > 0 && hour < 4 || hour > 7 && hour < 13 || hour == 16 ))
)
这是一种编写您要执行的操作的简便方法。 将标志设置为false,如果满足您的一天/小时组合之一,则将其更改为true。 如果您的标志为true,请在最后运行代码。 将小时检查抽象为一个单独的函数。 还有很多其他方法可以改善此情况,但这是我的尝试。
var date = new Date();
var hour = date.getHours();
var day = date.getDay();
function isBetween(testNumber, lowerLimit, upperLimit) {
return testNumber >= lowerLimit || testNumber <= upperLimit;
}
var flag = false;
if(day === 1 && (isBetween(hour, 4, 5) || isBetween(hour, 8, 23))) {
flag = true;
}
if(isBetween(day, 2, 4) && (isBetween(hour, 0, 5) || isBetween(hour, 8, 23))){
flag = true;
}
if(day === 5 && (isBetween(hour, 0, 5) || isBetween(hour, 8, 21))) {
flag = true;
}
if(day === 6 && (isBetween(hour, 1, 3) || isBetween(hour, 8, 12) || hour === 16)) {
flag = true;
}
if(flag) {
// do something
}
您编写代码的方式很难读取和维护。 如果将来需要进行更改,则必须通读大量的if
语句,并注意不要破坏任何内容。 这样,每个逻辑部分都是独立的,如果您需要更改一个逻辑部分,则不必担心会破坏所有内容。 对于可能不得不在您的项目上工作的其他任何人来说,该代码也更容易阅读。 希望这可以帮助!
为了简化您的代码并使其他人更容易理解和调试,请使用天和小时将应运行代码的天数放在数组中。 因此,星期一4点将被存储为“ 2_4”。 然后遍历数组以检查当前日期和时间是否与任何数组值匹配,如果匹配,则执行代码。 这是一个例子:
var date = new Date();
var hour = date.getHours();
var day = date.getDay();
var combined = day+'_'+hour;
//add additonal days when the code should run
var run_on = ['2_4','2_5','3_0', '3_1'];
for (i = 0; i < run_on.length; i++){
if (combined == run_on[i]){
//execute your code
break;
}
}
这样可以大大减少代码,并且如果需要添加或删除任何时间或日期,则可以轻松地做到这一点,而不必每次都重写逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.