“if”语句中的日期范围

时间:2017-04-28 07:40:04

标签: javascript date if-statement

我有这段代码:

function auto_select_param_call_time() {
    if (today() == date("02.01.2017") || today() == date("03.01.2017")) {
        auto_click_param("call_time", "Non-working day");
    } else {
        //Do something else
    }
}

如您所见,它会检查今天是否有任何假期。 现在我需要为这个'如果'添加大约8个新假期。 如果只是像“今天()==日期(”02.01.2017“)那样将它们全部写下来”它会变得非常丑陋而且非常快。

我有什么方法可以写一系列日期吗?例如,“如果它在06.05.2017和9.05.2017之间,那么......”,没有使用开关?

还是其他任何方式?

1 个答案:

答案 0 :(得分:0)

  

如您所见,它会检查今天是否有任何假期。

我无法从代码中看到这一点。我居住的地方,“02.01.2017”(2017年1月2日)是一个公共假期,代替1月1日,这是一个星期天。但“2017年1月3日”(2017年1月3日)不是公众假期。

你可能会做的是写一个公共假日日期数组,看看日期是否等于其中一个,例如

// Helper to format date as local ISO 8601 date only
if (!Date.prototype.toISODateLocal) {
  Date.prototype.toISODateLocal = function() {
    return this.getFullYear() + '-'  +
      ('0' + (this.getMonth()+1)).slice(-2) + '-' +
      ('0' + this.getDate()).slice(-2);  
  };
}

/* Check if date is a holiday
** @param {Date} date - date to check
** @returns {Boolean} true if date is a public holiday, 
** otherwise false
*/
function isHoliday(date) {
  var dateString = date.toISODateLocal();
  var holidays = ['2017-01-02','2017-04-14','2017-04-17'];
  return holidays.indexOf(dateString) > -1;
}

[new Date(2017,0,2),
 new Date(2017,3,14),
 new Date()].forEach(function(date) {
   console.log(date.toISODateLocal() + ' is ' +
     (isHoliday(date)? '':'not ') + 'a holiday.');
});
     

您可以使用具有开始日期和结束日期的对象来进行连续假期,但大多数不是日期范围,因此我认为只使用特定日期的数组更简单。每年只有十几个,所以不是一个大问题。

如果您想查看日期是否在其他两个日期之间,您可以使用比较<>运算符,例如

// See if date falls on 1 Jan to 10 Jan inclusive
var rangeStart = new Date(2017,0,1);  // Start of 1 Jan
var rangeEnd = new Date(2017,0,10,23,59,59,999); // End of 10 Jan

[new Date(2017,0,5),  //  5 Jan
 new Date(2017,0,10), // 10 Jan
 new Date(2017,0,11)  // 11 Jan
].forEach(function(date) {
  console.log(date + ' in range? ' + (date >= rangeStart && date <= rangeEnd));
})