我正在尝试将fullcalender集成到php mysql。我使用了以下代码。我想格式化日期,它将以格式yyyy / mm / dd格式化但是当我使用格式语句时代码无法正常工作。如果我删除格式日期,它似乎有效,但在数据库中插入0000/0000/000 00:00。
我的代码:
// Convert the allDay from string to boolean
eventRender: function(event, element, view) {
if (event.allDay === 'true') {
event.allDay = true;
}
else {
event.allDay = false;
}
},
selectable: true,
selectHelper: true,
select: function(start, end, allDay) {
var title = prompt('Sample Textbox:');
if (title) {
start = $.fullCalendar.formatDate(start, "yyyy-MM-dd HH:mm:ss");
end = $.fullCalendar.formatDate(end, "yyyy-MM-dd HH:mm:ss");
$.ajax({
url: 'http://localhost/fullcalendar/demos/add_events.php',
data: 'title='+ title+'&start='+ start +'&end='+ end ,
type: "POST",
success: function(json) {
alert('Added Successfully');
alert(json);
}
});
calendar.fullCalendar('renderEvent',
{
title: title,
start: start,
end: end,
allDay: allDay
},
true // make the event "stick"
);
}
calendar.fullCalendar('unselect');
},
有谁可以告诉我这是什么问题? 如果我删除格式日期它正在工作,否则它不起作用。但我必须格式化数据才能将其正确插入数据库中。我只想要约会,不需要几个小时。
答案 0 :(得分:9)
首先,如果您只查找日期而不是小时,您应该使用:
start = $.fullCalendar.formatDate(start, "yyyy/MM/dd");
end = $.fullCalendar.formatDate(end, "yyyy/MM/dd");
而不是:
start = $.fullCalendar.formatDate(start, "yyyy-MM-dd HH:mm:ss");
end = $.fullCalendar.formatDate(end, "yyyy-MM-dd HH:mm:ss");
如果删除日期格式,它似乎有效,因为它插入日期就像时间戳(看起来像时间戳)。 尝试将数据库结构类型更改为VARCHAR,您将看到如下内容:
1405468800000
使用dateFormat功能时,应查看Web浏览器控制台日志。你可能会看到:
Uncaught TypeError: undefined is not a function
这是因为fullCalendar V2(changeLog)上不存在$.fullCalendar.formatDate
方法。
您可以Moment.js
使用.format()
方法(doc)。
不要忘记导入moment.js
并将start
和end
变量修改为:
start=moment(start).format('YYYY/MM/DD');
end=moment(end).format('YYYY/MM/DD');
它应该解决你的问题。
答案 1 :(得分:5)
下面的代码应该可以解决问题。 (假设你有moment.min.js lib)
start=moment(start).format('YYYY-MM-DDTHH:mm:ssZ');
end=moment(end).format('YYYY-MM-DDTHH:mm:ssZ');
答案 2 :(得分:3)
正如Tifa's answer所示:如果您不需要时间部分,请不要对其进行编码:
start = $.fullCalendar.formatDate(start, "yyyy-MM-dd");
另一个问题在于传递给ajax请求的参数字符串:
data: 'title='+ title+'&start='+ start +'&end='+ end ,
此字符串未进行网址编码。
最简单的解决方法是传递一个对象,让jQuery处理编码:
data: {'title': title, 'start': start, 'end': end } ,
答案 3 :(得分:0)
在某些版本上,“ DD T HH:mm”添加项将失败-可以将其保留并使用纯日期格式。如果需要,请添加“ Z”以补偿时区。
select: function(start, end){
var converted_start = moment(start).format('YYYY-MM-DD:HH:mm:ssZ');// the "Z" will adjust for time zone
var converted_end = moment(end).format('YYYY-MM-DD:HH:mm:ssZ');
},