为dateClick禁用FullCalendar中的过去日期



那些仍然在寻找如何禁用过去日期的解决方案的人单击FullCalendar上的Dateclick事件。可以尝试看看下面的解决方案,如果任何读者有其他的想法可以在下面发布其他的解决方案。如果有另一种简单的方法就好了。解决方案越多越好。

通过执行如下简单的比较,可以改进日期的字符串操作:

dateClick: function (info) {
var clickedDate = getDateWithoutTime(info.date);
var nowDate = getDateWithoutTime(new Date())
if (clickedDate >= nowDate) alert("Future date");
else alert("Past date");
}

这个函数可以帮助你:

//get date without the time of day
function getDateWithoutTime(dt)
{
dt.setHours(0,0,0,0);
return dt;
}

演示:https://codepen.io/ADyson82/pen/ZErwJGx


实现相同目标的另一个选择是使用validRange功能。这允许您动态设置开始日期,在此之前所有日期都被禁用:

validRange: function (nowDate) {
return {
start: nowDate
};
},

演示:https://codepen.io/ADyson82/pen/VwQgWJO

这样做的一个小缺点是它也隐藏了当前日期之前发生的任何事件——你可能不希望这样。


因此,另一种选择是使用selectAllow来限制用户可以选择的位置。请注意,这依赖于您使用select而不是dateClick回调-但这应该不是一个大问题。

selectAllow: function (info) {
return (info.start >= getDateWithoutTime(new Date()));
}

演示:https://codepen.io/ADyson82/pen/VwQgzZJ

下面是我目前在FullCalendar上禁用过去日期的解决方案。如果有任何想法或改进,请改进下面的代码。

dateClick: function(e) {
// Get Today
var dt = calendar.getDate();
var year = dt.getFullYear();
var month = dt.getMonth() + 1;
var day = dt.getDate();
if(month < 9){
month = '0'+month;
}
if(day < 9){    
day = '0'+day;
}

var today = year + '-' + month + '-' + day;
// Get Selected Date
var check = e.dateStr;

let A = today.toString();
let B = check.toString();
alert('Date A: ' + A );
alert('Date B: ' + B );
if(B >= A){
alert('Past Date');
}
else{
alert('Future Date');
}
},

相关内容

最新更新