问题是,如何在fullcalendar的月/周视图中禁用PAST DATES上的可选项。
我希望用户不允许点击/选择过去的日期。
以下是我尝试在事件呈现上实现的一些Google搜索代码段:
selectable: true,
selectHelper: false,
select: function(start, end, allDay) {
var appdate = jQuery.datepicker.formatDate('<?php echo $DPFormat; ?>', new Date(start));
jQuery('#appdate').val(appdate);
jQuery('#AppFirstModal').show();
},
eventRender: function(event, element, view)
{
var view = 'month' ;
if(event.start.getMonth() !== view.start.getMonth()) { return false; }
},
但它不起作用。
我也尝试过了CSS,这有助于我隐藏过去的日期文本,但是可选择仍在使用过时日期。
.fc-other-month .fc-day-number {
display:none;
}
我真的很困惑这个问题。请有人帮助我。 感谢...
答案 0 :(得分:30)
我已经在我的完整日历中完成了这项工作,并且工作正常。
您可以在选择功能中添加此代码。
select: function(start, end, allDay) {
var check = $.fullCalendar.formatDate(start,'yyyy-MM-dd');
var today = $.fullCalendar.formatDate(new Date(),'yyyy-MM-dd');
if(check < today)
{
// Previous Day. show message if you want otherwise do nothing.
// So it will be unselectable
}
else
{
// Its a right date
// Do something
}
},
我希望它会对你有所帮助。
答案 1 :(得分:24)
我喜欢这种方法:
select: function(start, end) {
if(start.isBefore(moment())) {
$('#calendar').fullCalendar('unselect');
return false;
}
}
它基本上会在&#34;现在&#34;。
之前禁用选择答案 2 :(得分:8)
感谢this answer,我找到了以下解决方案:
$('#full-calendar').fullCalendar({
selectable: true,
selectConstraint: {
start: $.fullCalendar.moment().subtract(1, 'days'),
end: $.fullCalendar.moment().startOf('month').add(1, 'month')
}
});
答案 3 :(得分:4)
你可以结合使用:
- 如问题所述,通过CSS隐藏文字
- disable PREV button on current month
- 查看dayClick / eventDrop等的日期:
dayClick: function(date, allDay, jsEvent, view) {
var now = new Date();
if (date.setHours(0,0,0,0) < now.setHours(0,0,0,0)){
alert('test');
}
else{
//do something
}
}
答案 4 :(得分:4)
在FullCalendar v3.0中,具有属性selectAllow:
descriptors = f.compute(img, keypoints)
答案 5 :(得分:2)
我尝试过这种方法,效果很好。
$('#calendar').fullCalendar({
defaultView: 'month',
selectable: true,
selectAllow: function(select) {
return moment().diff(select.start) <= 0
}
})
享受!
答案 6 :(得分:2)
这个问题的旧答案还可以...
但是,官方文档提出了一种新的,更简洁的解决方案:
首先设置您要成为下界的日期
var today = new Date().toISOString().slice(0,10);
然后使用validRange
包含范围。只需省略end
日期。
validRange: {
start: today
}
答案 7 :(得分:1)
不需要长程序,只需尝试一下。
checkout.setMinSelectableDate(Calendar.getInstance().getTime());
Calendar.getInstance().getTime()
给我们当前日期。
答案 8 :(得分:1)
在fullcalendar 3.9中,您可能更喜欢validRange function parameter
:
validRange: function(nowDate){
return {start: nowDate} //to prevent anterior dates
},
缺点:这也会在该日期时间之前隐藏事件
答案 9 :(得分:1)
这是我目前正在使用的
还添加了.add()函数,因此用户无法在同一时间添加事件
select: function(start, end, jsEvent, view) {
if(end.isBefore(moment().add(1,'hour').format())) {
$('#calendar').fullCalendar('unselect');
return false;
}
答案 10 :(得分:1)
*You can use this*
var start_date= $.fullCalendar.formatDate(start,'YYYY-MM-DD');
var today_date = moment().format('YYYY-MM-DD');
if(check < today)
{ alert("Back date event not allowed ");
$('#calendar').fullCalendar('unselect'); return false
}
答案 11 :(得分:1)
我一直在使用validRange
选项。
validRange: {
start: Date.now(),
end: Date.now() + (7776000) // sets end dynamically to 90 days after now (86400*90)
}
答案 12 :(得分:0)
在Fullcalendar中,我通过dayClick事件实现了这一目标。我认为这是简单的方法。
这是我的代码。
protected void Page_Load(object sender, EventArgs e)
{
//not here
GridViewUserList.DataSource = source;
GridViewUserList.DataBind();
if (IsPostBack == false)
{
//but bind data here...
GridViewUserList.DataSource = source;
GridViewUserList.DataBind();
}
}
希望它可以帮助您选择过去和将来的日期。
答案 13 :(得分:0)
如果任何一个答案都不适合您,请尝试此操作,希望它对您有用。
select: function(start, end, allDay) {
var check = formatDate(start.startStr);
var today = formatDate(new Date());
if(check < today)
{
console.log('past');
}
else
{
console.log('future');
}
}
并创建日期格式的函数,如下所示
function formatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2) month = '0' + month;
if (day.length < 2) day = '0' + day;
return [year, month, day].join('-');
}
我已经尝试了以上所有问题,但对我不起作用
如果其他答案对您有用,您可以尝试一下。
谢谢