我尝试了很多事情,但无法理解我所缺少的地方。 也尝试过不同的解决方案。
$('#calendar').fullCalendar({
eventClick: function(eventObj, jsEvent, view) {
$("#eventSubTitle").html(eventObj.patient);
$("#eventLink").attr('href', eventObj.url);
$("#eventHeader").html(eventObj.appointmentType);
$("#eventStartTime").html(eventObj.start._i);
$("#eventEndTime").html(eventObj.end._i);
$("#appointmentId").val(eventObj.id);
$("#eventDetailModal").modal('show');
},
timeFormat: 'hh:mm a',
header: {
left: 'prev,next today',
center: 'title',
right: 'month,basicWeek,basicDay'
},
defaultView: 'basicWeek',
defaultDate: $.datepicker.formatDate('mm/dd/yy', new Date()),
editable: true,
eventLimit: true, // allow "more" link when too many events
events: ${raw(allList as String)},
eventRender: function(event, element) {
element.find('.fc-title').append(" - " + event.patient);
},
eventAfterRender: function (event, element, view) {
var dataHoje = new Date();
if (event.start < dataHoje && event.end > dataHoje) {
element.css('background-color', 'green');
} else if (event.start < dataHoje && event.end < dataHoje) {
element.css('background-color', 'red');
} else if (event.start > dataHoje && event.end > dataHoje) {
element.css('background-color', '#000080');
}
},
});
您能建议我解决上述代码吗?
答案 0 :(得分:1)
问题是$.datepicker.formatDate('mm/dd/yy', new Date())
会产生mm / dd / yy格式的字符串。但这并不明确-如果今天是2019年1月3日,它将输出01/03/19
...但是日历如何确保它不是dd / mm / yy格式-也许您是说3月1日呢?它没有办法知道。它仅有的是原始字符串,没有任何上下文。
这里的解决方案很简单:不要使用含糊的日期格式。实际上,如果可以避免的话,根本不要使用字符串作为日期-尽可能使用Date或MomentJS objects 。
(这些对象在内部携带日期信息,而不必担心日期/时间可能出现的多种人类可读字符串格式的影响。可以使它们以以下任何一种方式输出信息格式,但这不是它们的存储方式,因此对数据的含义毫无疑问。)
在这种情况下,您可以轻松避免使用字符串:
defaultDate: new Date()
是完全有效的-fullCalendar会接受momentJS构造函数也接受的任何日期字符串或对象(或者它将接受预制的momentJS对象)。您完全不需要格式化它。
但是,由于defaultDate
仍然默认为今天的日期,因此实际上您可以完全删除该行-您只需将其设置为已经是默认值即可。
当然,您的事件数据也可能有相同的问题-我看不到,因此无法发表评论。但是您应该确保开始日期和结束日期的格式正确无误,以便fullCalendar可以确定您的意思。
有关更多文档,请参见http://momentjs.com/docs/#/parsing/string/,https://fullcalendar.io/docs/defaultDate和https://fullcalendar.io/docs/moment。