問題は、fullcalendarの月/週ビューで過去の日付で選択可能を無効にする方法です。
過去の日付をクリック/選択することをユーザーに許可しないようにします。
ここに、イベントレンダリングで実装しようとしているgoogledコードスニペットを示します:
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を試してみましたが、これは過去の日付のテキストのみを非表示にするのに役立ちますが、selectableはまだ過去の日付ボックスで動作しています。
.fc-other-month .fc-day-number {
display:none;
}
私は本当にこの問題にこだわっています。誰か助けてください。ありがとう...
これをフルカレンダーで実行しましたが、完全に機能しています。
このコードを選択関数に追加できます。
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
}
},
それがあなたのお役に立てば幸いです。
私はこのアプローチが好きです:
select: function(start, end) {
if(start.isBefore(moment())) {
$('#calendar').fullCalendar('unselect');
return false;
}
}
基本的に、「今」より前の時間の選択を無効にします。
この回答 のおかげで、以下の解決策が見つかりました:
$('#full-calendar').fullCalendar({
selectable: true,
selectConstraint: {
start: $.fullCalendar.moment().subtract(1, 'days'),
end: $.fullCalendar.moment().startOf('month').add(1, 'month')
}
});
FullCalendar v3.0には、プロパティ selectAllow があります。
selectAllow: function(info) {
if (info.start.isBefore(moment()))
return false;
return true;
}
以下を組み合わせることができます。
-質問で言及されているようにCSSによってテキストを非表示にする
-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
}
}
私はこのアプローチを試しましたが、うまくいきます。
$('#calendar').fullCalendar({
defaultView: 'month',
selectable: true,
selectAllow: function(select) {
return moment().diff(select.start) <= 0
}
})
楽しい!
以下は私が現在使用しているソリューションです:
select: function(start, end, jsEvent, view) {
if (moment().diff(start, 'days') > 0) {
$('#calendar').fullCalendar('unselect');
// or display some sort of alert
return false;
}
長いプログラムは必要ありません。これを試してください。
checkout.setMinSelectableDate(Calendar.getInstance().getTime());
Calendar.getInstance().getTime()
現在の日付を提供します。
validRange
オプションを使用しています。
validRange: { start: Date.now(), end: Date.now() + (7776000) // sets end dynamically to 90 days after now (86400*90) }
*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
}
これは私が現在使用しているものです
また、ユーザーが同じ時間にイベントを追加できないように.add()関数を追加しました
select: function(start, end, jsEvent, view) {
if(end.isBefore(moment().add(1,'hour').format())) {
$('#calendar').fullCalendar('unselect');
return false;
}
Fullcalendar 3.9では、 validRange function parameter
:
validRange: function(nowDate){
return {start: nowDate} //to prevent anterior dates
},
欠点:これは、その日時より前のイベントも非表示にします
Fullcalendarでは、dayClickイベントで達成しました。簡単な方法だと思いました。
これが私のコードです。
dayClick: function (date, cell) {
var current_date = moment().format('YYYY-MM-DD')
// date.format() returns selected date from fullcalendar
if(current_date <= date.format()) {
//your code
}
}
過去と未来の日付が選択できなくなることを願っています。
答えのいずれかがあなたのためにうまくいかない場合、これを試してみてくださいあなたのためにその仕事を願っています。
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('-');
}
上記の質問をすべて試してみましたが、うまくいきません
他の回答が機能する場合は、これを試すことができます。
ありがとう