Javascript 如何根据日历模式创建事件?

Javascript 如何根据日历模式创建事件?,javascript,logic,fullcalendar,momentjs,Javascript,Logic,Fullcalendar,Momentjs,我正在尝试为某人创建一个“轮班”日历,我知道该模式从哪一天开始,我知道该模式在几天之内和几天之内。但是我很难把它翻译成代码 他们工作4天,休息3天,工作4天,休息3天,工作4天,休息2天,重复。我需要创建一些逻辑来为基于此的日历创建事件 这就是我所拥有的: $(document).ready(function() { var on = [4, 4, 4]; var off = [3, 3, 2]; var startPattern = "2017-03-04"; var da

我正在尝试为某人创建一个“轮班”日历,我知道该模式从哪一天开始,我知道该模式在几天之内和几天之内。但是我很难把它翻译成代码

他们工作4天,休息3天,工作4天,休息3天,工作4天,休息2天,重复。我需要创建一些逻辑来为基于此的日历创建事件

这就是我所拥有的:

$(document).ready(function() {

  var on = [4, 4, 4];
  var off = [3, 3, 2];
  var startPattern = "2017-03-04";

  var days = $('#calendar').fullCalendar('getDate').daysInMonth();
  var events = [];

  for (var i = $('#calendar').fullCalendar('getDate').day(); i < days; i++) {
    var event = {
      title: "work",
      start: ''
    }
    events.push(event);
  }


  $('#calendar').fullCalendar({
    // put your options and callbacks here
    events: events

  });
});
$(文档).ready(函数(){
var on=[4,4,4];
var off=[3,3,2];
var startPattern=“2017-03-04”;
var days=$('#calendar').fullCalendar('getDate').daysInMonth();
var事件=[];
对于(var i=$('#calendar').fullCalendar('getDate').day();i
Plunker:

$(文档).ready(函数(){
//确定时间表;
//持续时间为天;
//标题是日历上显示的内容
//颜色是如何给事件着色的
var计划=[{
持续时间:4,
标题:"工作",,
颜色:“红色”
}, {
持续时间:3,
标题:"关",,
颜色:“蓝色”
}, {
持续时间:4,
标题:"工作",,
颜色:“红色”
}, {
持续时间:3,
标题:"关",,
颜色:“蓝色”
}, {
持续时间:4,
标题:"工作",,
颜色:“红色”
}, {
持续时间:2,
标题:"关",,
颜色:“蓝色”
}, ];
//定义要生成的事件范围
var startDay=时刻(“2017-03-04”);
var endDay=时刻(“2017-05-04”);
//生成事件
var事件=[];
//我们从开始到结束循环一天
//按照代码的定义方式,它将始终完成一个计划段
对于(var s=0,day=startDay;day.isBefore(endDay);){
//计划段中每一天的循环
对于(变量i=0;i<计划[s]。持续时间;i++){
//添加具有当前属性的事件
事件。推({
标题:附表。标题,
颜色:明细表[s]。颜色,
//我们必须克隆,因为下面的add()调用会更改日期
开始:day.clone(),
全天:没错
});
//第二天去
天=天。添加(1,“天”);
}
//转到下一个时间表部分
s=(s+1)%schedule.length;
}
//渲染日历
$(“#日历”).fullCalendar({
事件:事件
});
});

您能举例说明一下,您所说的“工作4、工作3、工作4、工作3、工作4”是什么意思吗。不清楚这是什么类型的轮班制,比如说你从3月4日开始,工作4天,然后休息3天,然后工作4天,然后休息3天,然后工作4天,然后休息2天。然后从一开始就重新开始,这样类似于:4-3-4-3-4-2Hmm,这似乎是可行的。感谢您的详细解决方案!我挣扎着把头绕过去。
$(document).ready(function() {

  // define the schedule; 
  // duration is days; 
  // title is what is shown on the calendar
  // color is how to color event
  var schedule = [{
    duration: 4,
    title: 'work',
    color: 'red'
  }, {
    duration: 3,
    title: 'off',
    color: 'blue'
  }, {
    duration: 4,
    title: 'work',
    color: 'red'
  }, {
    duration: 3,
    title: 'off',
    color: 'blue'
  }, {
    duration: 4,
    title: 'work',
    color: 'red'
  }, {
    duration: 2,
    title: 'off',
    color: 'blue'
  }, ];

  // define the range of events to generate
  var startDay = moment("2017-03-04");
  var endDay = moment("2017-05-04");


// generate the events
  var events = [];
  // we loop from the start until we have passed the end day
  // the way the code is defined, it will always complete a schedule segment
  for (var s = 0, day = startDay; day.isBefore(endDay);) {
    // loop for each day of a schedule segment
    for (var i = 0; i < schedule[s].duration; i++) {
      // add the event with the current properties
      events.push({
        title: schedule[s].title,
        color: schedule[s].color,
        // we have to clone because the add() call below mutates the date
        start: day.clone(),
        allday: true
      });
      // go to the next day
      day = day.add(1, 'day');
    }

    // go to the next schedule segment
    s = (s + 1) % schedule.length;
  }



  // render the calendar
  $('#calendar').fullCalendar({
    events: events
  });

});