我需要将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 ))
)
答案 0 :(得分:0)
这是一种更简单的方式来撰写您尝试做的事情。将标志设置为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
声明,并注意不要破坏任何内容。这样,每一条逻辑都是独立的,如果你需要改变一件,你就不必担心会破坏一切。对于可能需要处理项目的其他人来说,代码也更容易阅读。希望这有帮助!
答案 1 :(得分:0)
为了简化代码并使其他人更容易理解和调试,请使用日期和小时将代码应该在数组中运行的日期。因此,星期一4点钟将被存储为&#39; 2_4&#39;。然后遍历数组以检查当前日期和时间是否与任何数组值匹配,如果匹配,则执行代码。这是一个例子:
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;
}
}
这会显着减少代码,如果有任何时间或日期需要添加或删除,您可以轻松完成,而无需每次都重写逻辑。