我有这段代码:
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之间,那么......”,没有使用开关?
还是其他任何方式?
答案 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));
})