Fullcalendar 插件的功能未在 mysql table 上正确插入
Function of Fullcalendar plugin dont insert correctly on mysql table
我正在使用 FullCalendar 插件从我的 mysql table 获取网络日历和 show/insert 事件。它正确显示了 bd 中的事件,但没有以正确的格式插入事件的日期。 (YYYY-MM-DD)。 mysql table 的两列都是 DATE 类型,与将要插入的事件的格式相同。
这是我的 JS 脚本,用于显示事件并通过 ajax 插入到 mysql
$(document).ready(function() {
var date = new Date();
var dd = date.getDate();
var mm = date.getMonth();
var yyyy = date.getFullYear();
var calendar = $('#calendar').fullCalendar({
editable: true,
events: "http://localhost/test-fullcalendar/php/eventos.php",
lang: "es",
selectable: true,
selectHelper: true,
select: function(start, end, allDay) {
var title = prompt('Evento a insertar:');
if (title) {
start = $.fullCalendar.moment('yyyy mm dd');
end = $.fullCalendar.moment('yyyy mm dd');
$.ajax({
url: 'http://localhost/test-fullcalendar/php/add_evento.php',
data: 'title='+ title+'&start='+ start +'&end='+ end ,
type: "POST",
success: function(json) {
alert('OK');
}
});
calendar.fullCalendar('renderEvent',
{
title: title,
start: start,
end: end,
allDay: allDay
},
true
);
}
calendar.fullCalendar('unselect');
}
});
});
问题出在 Fullcalendar 的函数 moment() 上:
start = $.fullCalendar.moment('yyyy mm dd');
end = $.fullCalendar.moment('yyyy mm dd');
函数没有正确接收实际日期,只在我的 table 上插入 "0000-00-00"。我尝试在 moment() 参数中传递日期,例如:
var date = yyyy + '-' + mm + '-' + dd;
开始=$.fullCalendar.moment(日期);
但它也插入“0000-00-00”。
javascript 函数 date.getMonth() 将 return 2 表示 3 月,但您想要 '03'
所以使用这个:
var mm = date.getMonth()+1;
mm=(mm<=9)?'0'+mm:mm;
您的格式不正确,因此您实际上返回的是 NaN
。
在传递 'yyyy mm dd'
的地方,您应该传递 start
变量,因此:
$.fullCalendar.moment('yyyy mm dd');
应该是
$.fullCalendar.moment(start).format('YYYY MM DD');
此外,请注意,根据 the Moment.js site,您的日期格式必须是大写的,可以更简单地写成 moment(start).format('YYYY MM DD');
演示
$('#fullCal').fullCalendar({
header: {
left: '',
center: 'prev title next today',
right: ''
},
selectable: true,
select: function(start, end, allDay) {
var title = prompt('Evento a insertar:');
if (title) {
start = moment(start).format('YYYY MM DD');
end = moment(end).format('YYYY-MM-DD'); /* w/ dashes if that is what you need */
alert('start: ' + start + ' end: ' + end);
/*rest of your code... */
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/moment.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.1.1/fullcalendar.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.1.1/fullcalendar.min.js"></script>
<div id="fullCal"></div>
我正在使用 FullCalendar 插件从我的 mysql table 获取网络日历和 show/insert 事件。它正确显示了 bd 中的事件,但没有以正确的格式插入事件的日期。 (YYYY-MM-DD)。 mysql table 的两列都是 DATE 类型,与将要插入的事件的格式相同。
这是我的 JS 脚本,用于显示事件并通过 ajax 插入到 mysql
$(document).ready(function() {
var date = new Date();
var dd = date.getDate();
var mm = date.getMonth();
var yyyy = date.getFullYear();
var calendar = $('#calendar').fullCalendar({
editable: true,
events: "http://localhost/test-fullcalendar/php/eventos.php",
lang: "es",
selectable: true,
selectHelper: true,
select: function(start, end, allDay) {
var title = prompt('Evento a insertar:');
if (title) {
start = $.fullCalendar.moment('yyyy mm dd');
end = $.fullCalendar.moment('yyyy mm dd');
$.ajax({
url: 'http://localhost/test-fullcalendar/php/add_evento.php',
data: 'title='+ title+'&start='+ start +'&end='+ end ,
type: "POST",
success: function(json) {
alert('OK');
}
});
calendar.fullCalendar('renderEvent',
{
title: title,
start: start,
end: end,
allDay: allDay
},
true
);
}
calendar.fullCalendar('unselect');
}
});
});
问题出在 Fullcalendar 的函数 moment() 上:
start = $.fullCalendar.moment('yyyy mm dd');
end = $.fullCalendar.moment('yyyy mm dd');
函数没有正确接收实际日期,只在我的 table 上插入 "0000-00-00"。我尝试在 moment() 参数中传递日期,例如:
var date = yyyy + '-' + mm + '-' + dd;
开始=$.fullCalendar.moment(日期);
但它也插入“0000-00-00”。
javascript 函数 date.getMonth() 将 return 2 表示 3 月,但您想要 '03'
所以使用这个:
var mm = date.getMonth()+1;
mm=(mm<=9)?'0'+mm:mm;
您的格式不正确,因此您实际上返回的是 NaN
。
在传递 'yyyy mm dd'
的地方,您应该传递 start
变量,因此:
$.fullCalendar.moment('yyyy mm dd');
应该是
$.fullCalendar.moment(start).format('YYYY MM DD');
此外,请注意,根据 the Moment.js site,您的日期格式必须是大写的,可以更简单地写成 moment(start).format('YYYY MM DD');
演示
$('#fullCal').fullCalendar({
header: {
left: '',
center: 'prev title next today',
right: ''
},
selectable: true,
select: function(start, end, allDay) {
var title = prompt('Evento a insertar:');
if (title) {
start = moment(start).format('YYYY MM DD');
end = moment(end).format('YYYY-MM-DD'); /* w/ dashes if that is what you need */
alert('start: ' + start + ' end: ' + end);
/*rest of your code... */
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/moment.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.1.1/fullcalendar.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.1.1/fullcalendar.min.js"></script>
<div id="fullCal"></div>