显示从现在起30天的日期,只有第30天检测是否为正确日期的周末或假日
Display date 30 days from now having only the 30th day detect if its a weekend or holiday for correct day
我正在尝试创建一个排除周末和节假日的函数。我正试图在30天后的文本框中显示。一旦30天循环,请检查该天,并确保它不是假日(如果是),请选择下一个可用的日期。出于某种原因,我想出的这个包括了所有的假期,所以它给了我一个截止到今天的12/21的日期。当我想要的最终结果是12/04。有人能告诉我如何相应地调整吗?
http://jsfiddle.net/byyeh83t/9/
例如,如果今天是2015年12月10日,30天后是2015年11月11日,也就是退伍军人日,该功能应该知道这一天是假日,然后将其定为2015年12日11日,而不允许它在周末。没有列出周末和节假日http://jsfiddle.net/byyeh83t/13/
HTML
<input name="workExemptDays" id="workExemptDays" type="text"/>
JS
$(document).ready(function() {
//Testing purposes
var natDays = [
[2014, 1, 1, 'New Year'],
[2014, 1, 20, 'Martin Luther King'],
[2014, 2, 17, 'Washingtons Birthday'],
[2014, 5, 26, 'Memorial Day'],
[2014, 7, 4, 'Independence Day'],
[2014, 9, 1, 'Labour Day'],
[2014, 10, 13, 'Columbus Day'],
[2014, 11, 11, 'Veterans Day'],
[2014, 11, 27, 'Thanksgiving Day'],
[2014, 11, 28, 'Thanksgiving Day'],
[2014, 12, 25, 'Christmas'],
[2014, 12, 26, 'Christmas'],
[2015, 1, 1, 'New Year'],
[2015, 1, 19, 'Martin Luther King'],
[2015, 2, 16, 'Washingtons Birthday'],
[2015, 5, 25, 'Memorial Day'],
[2015, 7, 3, 'Independence Day'],
[2015, 9, 7, 'Labour Day'],
[2015, 10, 12, 'Columbus Day'],
[2015, 11, 11, 'Veterans Day'],
[2015, 11, 26, 'Thanksgiving Day'],
[2015, 11, 27, 'Thanksgiving Day'],
[2015, 12, 24, 'Christmas'],
[2015, 12, 25, 'Christmas']
];
// dateMin is the minimum delivery date
var dateMin = new Date();
function AddBusinessDays(curdate, weekDaysToAdd) {
var date = new Date(curdate.getTime());
while (weekDaysToAdd > 0) {
date.setDate(date.getDate() + 1);
//check if current day is business day
if (noWeekendsOrHolidays(date)[0]) {
weekDaysToAdd--;
}
}
return date;
}
function noWeekendsOrHolidays(date) {
var noWeekend = $.datepicker.noWeekends(date);
return (noWeekend[0] ? nationalDays(date) : noWeekend);
}
function nationalDays(date) {
for (i = 0; i < natDays.length; i++) {
if (date.getFullYear() == natDays[i][0] && date.getMonth() == natDays[i][1] - 1 && date.getDate() == natDays[i][2]) {
return [false, natDays[i][3] + '_day'];
}
}
return [true, ''];
}
function setDeliveryDate(date) {
$('#workExemptDays').val($.datepicker.formatDate('mm/dd/yy', date));
}
setDeliveryDate(AddBusinessDays(dateMin, 30));
});
基本上,从现在起30天的显示日期只有第30天,如何检测它是周末还是假期,以确保它是有效的一天。
问题是,从现在到接下来的30天,你每天都在检查,看看每一天是周末还是假期。如果一天是周末或假日,你就要取消一天。所以基本上你增加了30个工作日。
要获得30天后的第一个非周末或假期,你需要做的是从30天开始添加,然后从该日期开始检查,并不断递增1,直到你发现一天不是周末或假期。
将AddBusinessDays
函数更改为以下内容:-
function AddBusinessDays(curdate, weekDaysToAdd) {
var date = new Date((new Date()).setDate(curdate.getDate() + weekDaysToAdd));
while (!noWeekendsOrHolidays(date)) {
date.setDate(date.getDate() + 1);
}
return date;
}
Fiddle
相关文章:
- 如何设置30天的电子邮件验证以由用户重新发送
- 将引导日期选取器限制为 30 天
- 当我选择 30 天图表时,我的 Highchart 图表真的很慢
- 在Highcharts.js上显示Google Analytics的30天流量
- 如何计算从今天起 30 天的日期
- 我的 Javascript cookie 在会话时过期,而不是在 30 天后过期
- highcart.js点间隔15天日期时间x轴
- 显示从现在起30天的日期,只有第30天检测是否为正确日期的周末或假日
- 如何在当前日期前30天获取
- 设置javascript日期对象为30天之前
- Jquery当前时间戳减去一天(重复30天)
- Bootstrap daterangpicker选择开始日期+ 30天作为maxDate
- Javascript -设置日期从现在起30天
- Cordova检索和删除超过30天的文件
- 我们如何在javascript中获得30天之前的所有日期
- 如何检查所选日期是否在30天内
- 如何检查日期是否在30天内
- 获取当前日期前30天的日期
- 日期减去 30 天错误
- 今天的日期 JavaScript 中的日期 -30 天