将一个月的FullCalendar事件复制到下个月


Copying a months FullCalendar events to next month

我使用的是FullCalendar,它非常完美(ish):)

现在,我的用户要求一种简单的方法,将整整一个月的计划轮班复制到下个月——或者任何一个月。

我已经有了一个"复制周"功能,它运行良好。但我根本无法找到复制整个月轮班的正确方法。我想把"A月A日N"复制到"B月B日N",但这导致了失败——如1。一个月中的每一天都在不断地移动。

有什么想法可以做到这一点吗?

编辑:

我正在寻找输入的任务实际上是在PHP/MySQL后端。在前端,用户只需选择2个:Copy month to和一个按钮"Copy"。

在后端,我收到"mthfrom=>2014-1"answers"mthto=>2015-1"。我可以用SELECT * from dbevent WHERE year(shiftstart)='2014' and MONTH(shiftstart)='1';找到2014-1的所有事件。

问题是我需要"匹配"正确的工作日,因此相应的工作日在复制到的月份匹配。例如,我想复制2014年1月至2014年3月的所有班次。

  • 如何确保周一的轮班在正确的工作日结束
  • 如何确保星期六/星期日没有轮班
  • 如果用户想将28天的月份复制到31天的月份,或者反之亦然,该怎么办

也许您可以使用两个连接的日期选择器(即,第二个日期的最早日期应该晚于第一个日期),并使用按钮复制事件。

IMO最好的方法是在服务器中复制事件。假设您有一个DB,您将从给定的时间段中选择事件,并在单击按钮时复制事件。

这样,您将有一个"按周期复制事件",而不是"按周(和月,和季度,..)复制事件"。

所以,你的前端代码应该是这样的:

<div class='input-group date' id='dtpFrom'>
    <input type='text' class="form-control" />
    <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span>
    </span>
</div>
<div class='input-group date' id='dtpTo'>
    <input type='text' class="form-control" />
    <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span>
    </span>
</div>
<button id="copyEvents" class="btn btn-default">Copy Events </button>
<div id="calendar"></div>
<script>
$('#dtpFrom').datetimepicker();
$('#dtpTo').datetimepicker();
$("#copyEvents").on('click', function() {
    var dateFrom = $('#dtpFrom').data("DateTimePicker").getDate(),
        dateTo = $("#dtpTo").data("DateTimePicker").getDate();
    $.ajax({
        url: 'url-for-server',
        data: {from: dateFrom, to: dateTo},
        type: 'post',
        dataType: 'json',
        success: function() {
            // reload events if you want
            $("#calendar").fullCalendar( 'refetchEvents' );
        }
    });
});
// start fullcalendar
$("#calendar").fullCalendar();
</script>

完整的代码在JsFiddle中是,并作为一个演示来指导您。我使用了Bootstrap,但您可以使用jQueryUI中的日期选择器。

唯一不存在的是您需要自己创建的服务器代码。但是,您将有一段时间复制到下个月,因此只需复制DB行,每个开始/结束添加1个月即可。