如何使用 jQuery datepicker 禁用每个月的最后 3 天

Posted

技术标签:

【中文标题】如何使用 jQuery datepicker 禁用每个月的最后 3 天【英文标题】:How to disable last 3 days of every month using jQuery datepicker 【发布时间】:2020-10-16 16:42:49 【问题描述】:
$('.scheduledate').change(function() 
    selectedDate = $(this).datepicker('getDate');
)

function checkDate(selectedDate)   
   var today = new Date();
   var d = selectedDate.getDate();  
   var dd = today.getDate();
   if(d == dd || d == dd+1 || d == dd+1 || d == dd+1 || d==29 || d== 30 || d==31)
    return [false,'na_dates','Close date F'];
    else
   return [true,'   ','Open date T'];
  

【问题讨论】:

通常更容易将日期设置为下个月的第一天并减少三天,而不是与特定数字进行比较。因此,人们不会弄乱特定月份(28/29/30/31)的天数。如何禁用你会在 SO 上找到很多。 ***.com/questions/15400775/… 查看下面的工作答案。 【参考方案1】:

这是 AlwaysHelpings 答案的副本,但采用了不同的方法来禁用一个月的最后三天。

var dateToday = new Date(); 

$("#datepicker").datepicker(
  beforeShowDay: noLastThreeDays,
  minDate: dateToday
);

function noLastThreeDays(date)
   //REM: Last day of month
  var tLastDayOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0);
  
  //REM: Date of the passed date
  var tDate = date.getDate();

  //REM: Lock the last three days of the month
  if(
    tDate === tLastDayOfMonth.getDate() ||
    tDate === tLastDayOfMonth.getDate()-1 ||
    tDate === tLastDayOfMonth.getDate()-2
  )
    return [false, "closed", "Sorry We are closed"]
  
  else
   return [true, "", ""]
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/themes/smoothness/jquery-ui.css" />

<input type="text" id="datepicker" placeholder="Last three days disabled">

【讨论】:

不,没关系。至少我学到了一些新东西。谢谢:) 还有一个条件是我需要从当前日期禁用过去的日期 您可以使用minDate 选项。 ***.com/questions/8356358/…【参考方案2】:

此解决方案(也源自 AlwaysHelping 的已删除答案)手动确定当月的最后一天,并将其与当前日期进行比较。

要向 datepicker 对象添加进一步的自定义,请将它们作为键/值对添加到 beforeShowDay: noLastThreeDays 之后(例如:要隐藏所有过去的日子,请使用 minDate: 0,如图所示。)

查看datepicker documentation 了解更多信息。

$("#datepicker").datepicker(
  beforeShowDay: noLastThreeDays,
  //minDate: 0
);

function noLastThreeDays(date)

  const
    dd = date.getDate(),
    mo = date.getMonth(),
    yr = date.getFullYear(),
    thirtyDayMonths = [3,5,8,10], // Apr, Jun, Sep, Nov        
    isLeapYear = (yr) =>
      (yr % 100 === 0) ? (yr % 400 === 0) : (yr % 4 === 0);

  // Last date of month
  let last = 31;
  if(thirtyDayMonths.includes(mo)) last = 30; 
  if(mo === 1) last = isLeapYear(yr) ? 29 : 28; 
  
  // Output to datepicker
  const result = (dd <= last - 3)
    ? [true, "", ""]
    : [false, "closed", "Sorry We are closed"];
  return result;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/themes/smoothness/jquery-ui.css" />

<label>Choose date:
  <input id="datepicker" />
</label>

【讨论】:

以上是关于如何使用 jQuery datepicker 禁用每个月的最后 3 天的主要内容,如果未能解决你的问题,请参考以下文章

Datepicker 如何仅选择未来日期并禁用 JQuery 和 CSS 中的过去日期?

动态禁用 jQuery Datepicker 图标

如何在 JQuery Datepicker 中禁用以前的日期

如何在 jquery datepicker 中动态禁用特定日期?

如何在 jquery UI datepicker 中禁用今天之前的日期?

如何在 jquery-ui datepicker 中禁用动画?