Javascript 如何根据日历模式创建事件?
我正在尝试为某人创建一个“轮班”日历,我知道该模式从哪一天开始,我知道该模式在几天之内和几天之内。但是我很难把它翻译成代码 他们工作4天,休息3天,工作4天,休息3天,工作4天,休息2天,重复。我需要创建一些逻辑来为基于此的日历创建事件 这就是我所拥有的: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
$(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
});
});