繁体   English   中英

Javascript是否适用于不同的日期和时间

[英]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.

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