Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改Fullcalendar中过去事件的颜色_Fullcalendar - Fatal编程技术网

更改Fullcalendar中过去事件的颜色

更改Fullcalendar中过去事件的颜色,fullcalendar,Fullcalendar,我试图实现在Fullcalendar中“灰显”过去的事件,但我没有任何运气。不过,我对Javascript不是很精通,所以我认为我犯了一些愚蠢的错误 我已经将建议的代码放入fullcalendar.js中,在第4587行的daySegHTML(segs)调用中 我在函数的初始变量列表的末尾添加了前两行(为什么不添加,我想),所以类似这样: ... var leftCol; var rightCol; var left; var right; var skinCss; var hoy = new

我试图实现在Fullcalendar中“灰显”过去的事件,但我没有任何运气。不过,我对Javascript不是很精通,所以我认为我犯了一些愚蠢的错误

我已经将建议的代码放入fullcalendar.js中,在第4587行的daySegHTML(segs)调用中

我在函数的初始变量列表的末尾添加了前两行(为什么不添加,我想),所以类似这样:

...
var leftCol;
var rightCol;
var left;
var right;
var skinCss;

var hoy = new Date;// get today's date
hoy = parseInt((hoy.getTime()) / 1000); //get today date in unix

var html = '';
...
然后,就在下面,我在循环中添加了另外两行:

for (i=0; i<segCnt; i++) {
    seg = segs[i];
    event = seg.event;
    classes = ['fc-event', 'fc-event-skin', 'fc-event-hori'];
    if (isEventDraggable(event)) {
        classes.push('fc-event-draggable');
    }

    unixevent = parseInt((event.end.getTime()) / 1000); //event date in Unix
    if (unixevent < hoy) {classes.push('fc-past');} //add class if event is old

    if (rtl) {
        if (seg.isStart) {
            classes.push('fc-corner-right');
        }
...

for(i=0;i无需修改fullcalendar.js。只需添加回调,如:

    eventRender: function(calev, elt, view) {
      if (calev.end.getTime() < sometime())
        elt.addClass("greyclass");
    },
eventRender:function(calev、elt、view){
if(calev.end.getTime()

您只需为.greyclass定义正确的CSS即可。

好的,下面是我现在得到的,它正在工作(某种程度上):

eventRender:function(calev、elt、view){
var ntoday=新日期();
if(calev.start.getTime()
在我的样式表中,我发现我需要重新设置外部和内部元素的样式以更改颜色;因此,
elt.children().addclass
添加了

我唯一能去上班的时间检查是查看开始时间,因为全天活动都没有结束时间,但这显然会导致多天活动出现问题


还有其他可能的解决方案吗?

每个事件都有一个与之关联的ID。最好根据事件ID维护您自己关于所有事件的元信息。如果您是从后端数据库弹出事件,请在表中添加一个字段。对我来说,最有效的方法是仅依靠回调来获取事件IDd然后设置/重置从我自己的数据存储中获取的属性。为了让您了解一些情况,我将粘贴在代码片段的一部分下面。关键是针对
EventDAO
类满足您的所有需要

public class EventDAO
{
    //change the connection string as per your database connection.
    //private static string connectionString = "Data Source=ASHIT\\SQLEXPRESS;Initial Catalog=amit;Integrated Security=True";

    //this method retrieves all events within range start-end
    public static List<CalendarEvent> getEvents(DateTime start, DateTime end, long nParlorID)
    {
        List<CalendarEvent> events = new List<CalendarEvent>();

        // your data access class instance
        clsAppointments objAppts = new clsAppointments();

        DataTable dt = objAppts.SelectAll( start, end);

        for(int i=0; i<dt.Rows.Count; ++i)
        {
            CalendarEvent cevent = new CalendarEvent();
            cevent.id = (int)Convert.ToInt64(dt.Rows[i]["ID"]);

                .....            

            Int32 apptDuration = objAppts.GetDuration();    // minutes
            string staffName =  objAppts.GetStaffName();
            string eventDesc = objAppts.GetServiceName();
            cevent.title = eventDesc + ":" + staffName;

            cevent.description = "Staff name: " + staffName + ", Description: " + eventDesc;

            cevent.start = (DateTime)dt.Rows[i]["AppointmentDate"];


            cevent.end = (DateTime) cevent.start.AddMinutes(apptDuration);

            // set appropriate classNames based on whatever parameters you have.
            if (cevent.start < DateTime.Now)
            {
                cevent.className = "pastEventsClass";
            }
            .....

            events.Add(cevent);
        }
    }
}

改编自@Jeff original answer,只需检查是否存在结束日期,如果它使用结束日期,则使用开始日期。有全天键(true/false),但仍然可以创建非全天事件,而无结束日期,因此它仍会抛出空错误。下面的代码对我有效

eventRender: function(calev, elt, view) {
            var ntoday = new Date().getTime();
            if (!calev.end){
                if (calev.start.getTime() < ntoday){
                    elt.addClass("past");
                    elt.children().addClass("past");
                }
            } else {
                if (calev.end.getTime() < ntoday){
                    elt.addClass("past");
                    elt.children().addClass("past");
                }
            }
        }
eventRender:function(calev、elt、view){
var ntoday=new Date().getTime();
如果(!calev.end){
if(calev.start.getTime()
根据FullCalendar v1.6.4

在css中设置过去事件的样式:

.fc-past{background-color:red;}
.fc-future{background-color:red;}
在css中设置未来事件的样式:

.fc-past{background-color:red;}
.fc-future{background-color:red;}

如果您将FullCalendar2与Google Calendar一起使用,则需要使用下面的代码版本。这将使用矩.js进行一些转换,但由于FC2需要它,因此您已经在使用它了

        eventRender: function(event, element, view) {                   
            var ntoday = new Date().getTime();
            var eventEnd = moment( event.end ).valueOf();
            var eventStart = moment( event.start ).valueOf();
            if (!event.end){
                if (eventStart < ntoday){
                    element.addClass("past-event");
                    element.children().addClass("past-event");
                }
            } else {
                if (eventEnd < ntoday){
                    element.addClass("past-event");
                    element.children().addClass("past-event");
                }
            }
        }
eventRender:function(事件、元素、视图){
var ntoday=new Date().getTime();
var eventEnd=力矩(event.end).valueOf();
var eventStart=时刻(event.start).valueOf();
如果(!event.end){
如果(事件开始<当天){
元素addClass(“过去事件”);
element.children().addClass(“过去的事件”);
}
}否则{
如果(eventEnd
改编自@MaxD下面的代码是我用来将过去事件涂成灰色的代码

JS for fullcalendar拉入Json

 events: '/json-feed.php',
 eventRender: function(event,element,view) {
         if (event.end < new Date().getTime())
          element.addClass("past-event");   
    },
 other options ....

太棒了!我尝试过使用回调函数,但没有完全掌握语法的窍门。(就像我说的,Javascript排骨令人尴尬地缺乏!)-不幸的是,这(当然是使用适当的“有时()”替换)导致了“未捕获的TypeError:无法调用null的方法'getTime'”出于某种原因…据我所知,它不喜欢calev.end.getTime()。是的,根据您的意愿定义时间/日期比较。至于calev.end为null,请使用调试器跟踪它;它应该是事件对象的属性:啊,看起来我在追逐一点小麻烦。第一个(几个)所讨论的日历上的事件是“全天”事件,因此calev.end属性显然是“null”,这停止了代码的进一步执行。我正在从Google日历中提取事件…是否还有其他东西可以用作捕获“今天”之前发生的全天事件的测试关于你的第二个答案:只需在elt中添加一个类,你就可以设置:
.pass.fc event title{color:gray;}
(或用于.fc event time等)来设置事件的样式。至于时间检查,“pass events”是什么意思,这取决于你自己……啊,谢谢你没有理解.fc event title。我希望过去的事件是什么意思“今天之前结束的活动”,但由于大多数活动都是全天活动,我可能不得不对我现在检查的方式感到高兴。您好,请查看我的答案,因为这将有助于多天活动。这是唯一有效的答案(使用FullCal v.2.0.3)。谢谢,Jaredatch。@问题27我应该在哪里添加此代码?它会出现在eventSources中吗?请注意,这会设置日历日的样式,而不是特定的事件。好的答案通常会与任何代码一起提供解释,以帮助提供上下文并解释它如何或为什么解决问题。
.past-event.fc-event, .past-event .fc-event-dot {
    background: #a7a7a7;
    border-color: #848484
}
 eventDataTransform = (eventData) => {
       let newDate = new Date();
          if(new Date(newDate.setHours(0, 0, 0, 0)).getTime() > eventData.start.getTime()){            
              eventData.color = "grey";        
          }else{
              eventData.color = "blue";    
          }
          return eventData;
      }
//color will change background color of event
//textColor to change the text color