Javascript如果适用于不同的日子和时间

时间:2017-05-22 15:52:38

标签: javascript if-statement days hour

我需要将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 ))
  )

2 个答案:

答案 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;
    }  
} 

这会显着减少代码,如果有任何时间或日期需要添加或删除,您可以轻松完成,而无需每次都重写逻辑。