jQuery Datepicker-禁用周末/假日和未来三个工作日的组合
使用我可以从日期选择器禁用周末和假日 但是,我想将这与从今天起禁用接下来的三个工作日结合起来。简单地设置最短日期相对容易:jQuery Datepicker-禁用周末/假日和未来三个工作日的组合,jquery,datepicker,Jquery,Datepicker,使用我可以从日期选择器禁用周末和假日 但是,我想将这与从今天起禁用接下来的三个工作日结合起来。简单地设置最短日期相对容易: var dateMin = new Date(); dateMin.setDate(dateMin.getDate() + 3); $(function() { $('#txtCollectionDate').datepicker( { beforeShowDay: noWeekendsOrHolidays, showOn: "both", dateFor
var dateMin = new Date();
dateMin.setDate(dateMin.getDate() + 3);
$(function() {
$('#txtCollectionDate').datepicker(
{
beforeShowDay: noWeekendsOrHolidays,
showOn: "both",
dateFormat: "dd/mm/yy",
firstDay: 1,
changeFirstDay: false,
minDate: dateMin
});
});
但是,我真正需要的是一个计算工作日的函数:
var dateMin = new Date();
dateMin.setDate(AddBusinessDays(3));
任何能够转换为JavaScript的人都能找到解决方案
代码(为ASP道歉):
收款日期
jQuery日期选择器测试
确认后的表格
形式变量
价值
收集表格
选择收款日期
$(文档).ready(函数(){
var dateMin=新日期();
var weekDays=AddWeekDays(3);
dateMin.setDate(dateMin.getDate()+工作日);
var natDays=[
[1,1,‘英国’],
[12,25,‘英国’],
[12,26,‘英国’]
];
函数noWeekendsOrHolidays(日期){
var noWeekend=$.datepicker.noWeekends(日期);
if(noWeekend[0]){
返回国家日(日期);
}否则{
立即返回;
}
}
功能国家日(日期){
对于(i=0;i=工作日添加
daysToAdd=(5天)+daysToAdd
}
while(工作日添加!=0){
var week=工作日添加-5
如果(周>0){
daysToAdd=7+daysToAdd
weekDaysToAdd=weekDaysToAdd-5
}else{//周<0
daysToAdd=(5+周)+daysToAdd
weekDaysToAdd=weekDaysToAdd-(5+周)
}
}
返回日期添加;
}
$(“#日期选择器”)。日期选择器(
{
是的,
展览日前:现在是周末或节假日,
altField:“#txtCollectionDate”,
showOn:“两者”,
日期格式:“日/月/年”,
第一天:1,
第一天:错,
minDate:dateMin
});
});
我的案例非常接近,但我的想法是应该将工作日数添加到脚本中。
我从Junto示例中将AddWeekDays()替换为AddBusinessDays()。因此,在计算minday时,它会跳过所有非工作日。
//假日
var natDays=[
[1,1,‘英国’],
[12,25,‘英国’],
[12,26,‘英国’]
];
var dateMin=新日期();
var weekDays=AddBusinessDays(3);
dateMin.setDate(dateMin.getDate()+工作日);
函数AddBusinessDays(工作日添加){
var curdate=新日期();
var realDaysToAdd=0;
而(工作日添加>0){
curdate.setDate(curdate.getDate()+1);
realDaysToAdd++;
//检查当前日期是否为工作日
如果(noWeekendsOrHolidays(curdate)[0]){
平日添加--;
}
}
返回realDaysToAdd;
}
函数noWeekendsOrHolidays(日期){
var noWeekend=$.datepicker.noWeekends(日期);
if(noWeekend[0]){
返回国家日(日期);
}否则{
立即返回;
}
}
功能国家日(日期){
对于(i=0;i
修改上述代码,针对不同年份的不同日期使用,您可以使用
<script>
//holidays
var natDays = [
[11,1,2012, 'mx'],[11,2,2012, 'mx'],[11,19,2012, 'mx'],
[12, 12, 2012, 'mx'],[12,20,2012, 'mx'],[12,25,2012, 'mx'],[12,31,2012, 'mx'],
[1,2,2013, 'mx'],[1,3,2013, 'mx'],[1, 4, 2013, 'mx'],[1,1,2014, 'mx'],[1,2,2014, 'mx']
];
var dateMin = new Date();
var weekDays = AddBusinessDays(3);
dateMin.setDate(dateMin.getDate() + weekDays);
function AddBusinessDays(weekDaysToAdd) {
var curdate = new Date();
var realDaysToAdd = 0;
while (weekDaysToAdd > 0){
curdate.setDate(curdate.getDate()+1);
realDaysToAdd++;
//check if current day is business day
if (noWeekendsOrHolidays(curdate)[0]) {
weekDaysToAdd--;
}
}
return realDaysToAdd;
}
function noWeekendsOrHolidays(date) {
var noWeekend = $.datepicker.noWeekends(date);
if (noWeekend[0]) {
return nationalDays(date);
} else {
return noWeekend;
}
}
function nationalDays(date) {
for (i = 0; i < natDays.length; i++) {
if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1] && date.getFullYear() == natDays[i][2]) {
return [false, '', 'No laboral ' + natDays[i][3]+'']; /* 'Holiday in ' + natDays[i][3] */
}
}
return [true, ''];
}
$(function() {
$( "#datepicker" ).datepicker({
beforeShowDay: noWeekendsOrHolidays,
altField: '#FI',
dateFormat: "dd/mm/yy",
defaultDate: '-0y',
changeMonth: true,
changeYear: true,
minDate: new Date(2012, 1 - 1, 5),
//minDate: "-1Y",
maxDate: "0Y",
showWeek: true,
firstDay: 0,
showOn: "both",
buttonImage: "images/calendar.gif",
buttonText: "Seleccionar Fecha", /*Select date text */
buttonImageOnly: true,
});
$(this).focus();
});
</script>
//假日
var natDays=[
[11,12012,[mx'],[11,22012,[mx'],[11,192012,[mx'],
[2012年12月12日,[12,202012,[mx'],[12,252012,[mx'],[12,312012,[mx'],
[1,22013,'mx'],[1,32013,'mx'],[1,4,2013,'mx'],[1,12014,'mx'],[1,22014,'mx']
];
var dateMin=新日期();
var weekDays=AddBusinessDays(3);
dateMin.setDate(dateMin.getDate()+工作日);
函数AddBusinessDays(工作日添加){
var curdate=新日期();
var realDaysToAdd=0;
而(工作日添加>0){
curdate.setDate(curdate.getDate()+1);
realDaysToAdd++;
//检查当前日期是否为工作日
如果(noWeekendsOrHolidays(curdate)[0]){
平日添加--;
}
}
返回realDaysToAdd;
}
函数noWeekendsOrHolidays(日期){
var noWeekend=$.datepicker.noWeekends(日期);
if(noWeekend[0]){
返回国家日(日期);
}否则{
立即返回;
}
}
功能国家日(日期){
对于(i=0;i //holidays
var natDays = [
[1, 1, 'uk'],
[12, 25, 'uk'],
[12, 26, 'uk']
];
var dateMin = new Date();
var weekDays = AddBusinessDays(3);
dateMin.setDate(dateMin.getDate() + weekDays);
function AddBusinessDays(weekDaysToAdd) {
var curdate = new Date();
var realDaysToAdd = 0;
while (weekDaysToAdd > 0){
curdate.setDate(curdate.getDate()+1);
realDaysToAdd++;
//check if current day is business day
if (noWeekendsOrHolidays(curdate)[0]) {
weekDaysToAdd--;
}
}
return realDaysToAdd;
}
function noWeekendsOrHolidays(date) {
var noWeekend = $.datepicker.noWeekends(date);
if (noWeekend[0]) {
return nationalDays(date);
} else {
return noWeekend;
}
}
function nationalDays(date) {
for (i = 0; i < natDays.length; i++) {
if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1]) {
return [false, natDays[i][2] + '_day'];
}
}
return [true, ''];
}
$('#datepicker').datepicker(
{
inline: true,
beforeShowDay: noWeekendsOrHolidays,
altField: '#txtCollectionDate',
showOn: "both",
dateFormat: "dd/mm/yy",
firstDay: 1,
changeFirstDay: false,
minDate: dateMin
});
<script>
//holidays
var natDays = [
[11,1,2012, 'mx'],[11,2,2012, 'mx'],[11,19,2012, 'mx'],
[12, 12, 2012, 'mx'],[12,20,2012, 'mx'],[12,25,2012, 'mx'],[12,31,2012, 'mx'],
[1,2,2013, 'mx'],[1,3,2013, 'mx'],[1, 4, 2013, 'mx'],[1,1,2014, 'mx'],[1,2,2014, 'mx']
];
var dateMin = new Date();
var weekDays = AddBusinessDays(3);
dateMin.setDate(dateMin.getDate() + weekDays);
function AddBusinessDays(weekDaysToAdd) {
var curdate = new Date();
var realDaysToAdd = 0;
while (weekDaysToAdd > 0){
curdate.setDate(curdate.getDate()+1);
realDaysToAdd++;
//check if current day is business day
if (noWeekendsOrHolidays(curdate)[0]) {
weekDaysToAdd--;
}
}
return realDaysToAdd;
}
function noWeekendsOrHolidays(date) {
var noWeekend = $.datepicker.noWeekends(date);
if (noWeekend[0]) {
return nationalDays(date);
} else {
return noWeekend;
}
}
function nationalDays(date) {
for (i = 0; i < natDays.length; i++) {
if (date.getMonth() == natDays[i][0] - 1 && date.getDate() == natDays[i][1] && date.getFullYear() == natDays[i][2]) {
return [false, '', 'No laboral ' + natDays[i][3]+'']; /* 'Holiday in ' + natDays[i][3] */
}
}
return [true, ''];
}
$(function() {
$( "#datepicker" ).datepicker({
beforeShowDay: noWeekendsOrHolidays,
altField: '#FI',
dateFormat: "dd/mm/yy",
defaultDate: '-0y',
changeMonth: true,
changeYear: true,
minDate: new Date(2012, 1 - 1, 5),
//minDate: "-1Y",
maxDate: "0Y",
showWeek: true,
firstDay: 0,
showOn: "both",
buttonImage: "images/calendar.gif",
buttonText: "Seleccionar Fecha", /*Select date text */
buttonImageOnly: true,
});
$(this).focus();
});
</script>