Fullcalendar结束日期错误一天

时间:2014-12-10 17:19:42

标签: javascript ruby-on-rails json fullcalendar

我正在制作fullCalendar支持的汽车预订功能。 这是coffescript文件。

    updateEvent = (event, delta, revertFunc) ->
      $.ajax
        type: "PUT"
        dataType: "json"
        success: (data) ->
            alert "Success"
        error: (data) ->
            revertFunc()
            errors = data.responseJSON.reservations[0][1]
            for message of errors
                alert errors[message]
        url: event.updateUrl
        data:
          reservation:
            reservation_start: event.start.format('DD-MM-YYYY')
            reservation_end: event.end.format('DD-MM-YYYY')
            transport_id: event.transport_id
            user_id: event.user_id

$(document).ready ->
  $(".calendar").fullCalendar
    events: gon.path
    eventDrop: updateEvent
    eventResize: updateEvent

这是带有事件的JSON提要。

[{"start":"2014-12-17T00:00:00.000Z","end":"2014-12-21T00:00:00.000Z","title":"Cassio Godinho","url":"/reservas/44/edit","allDay":true,"editable":true,"updateUrl":"/reservation/44","transport_id":1,"user_id":1}]

end日期为2014-12-21,但这是我在日历enter image description here

上的日期

文档说明了这一点(我认为):

endParam
It is the moment immediately after the event has ended. For example, if the last full day of an event is Thursday, the exclusive end of the event will be 00:00:00 on Friday!

但我不太清楚如何处理这些信息...

9 个答案:

答案 0 :(得分:9)

我认为指示中的关键字是exclusive,因此无论您指定的时间都不包含在日期范围内。

所以在你的情况下"2014-12-21T00:00:00.000Z"意味着事件将在12-21开始时不再存在。如果您希望活动通过12-21,则需要将结束时间设置为"2014-12-22T00:00:00.000"(12-22中的第一个可能时间)。

答案 1 :(得分:3)

我有同样的问题,我终于想通了。

我使用全天都是TRUE,根据文档,如果你使用全天,它会及时表现。

首先,我将全天改为FALSE ,然后

在我结束的那天,我添加了 $ endDate。“T23:59:00”;

这对我有用。

答案 2 :(得分:2)

最好的部分是将20:00:00附加到结束日期,如下所示:

var ed = $("endDate").val();
newVar = ed+" 20:00:00";

这就是你所需要的一切。

答案 3 :(得分:1)

我有同样的问题,但我试验了时间,那就是决议:)

2014-12-21T00:00:00 => 2014-12-21T23:59:00 这将解决您的问题。

答案 4 :(得分:0)

如果您将结束日期设置为12-21-2014的0小时,分钟,秒等,则当天没有时间显示活动。

您可能需要将结束日期提前到第二天的0小时,因为您将事件设置为全天活动,但是您也可以将任何金额(例如一小时)的时间推进以便事件属于期望的结束日期,然后是应该呈现的全天事件。

如果他们的事件对象包含你可以设置的持续时间参数会很好,至少我没有在他们的文档中看到一个。

答案 5 :(得分:0)

我不知道它是否仍然有用,但您可以使用此方法,使用以下内容为结束日期添加一天:

$date = new DateTime('2000-01-01');
$date->add(new DateInterval('P0Y0M1DT0H0M0S'));

这会将结束日期增加一天。

答案 6 :(得分:0)

我也面临同样的问题并通过在结束日期添加"T23:59:00"来解决它,即"end" => $end_date."T23:59:00"

答案 7 :(得分:0)

在Angular中 当结束日期时间大于23:59:59时,将结束日期时间更改为当前时间 `

this.calendarOptions = {
  editable: false,
  eventLimit: false,
  validRange: {
    start: '',
    end: new Date(new Date().getUTCFullYear(), new Date().getUTCMonth())
  },
  header: {
    left: '',
    center: 'title',
    right: 'prev,next'
  },
  eventSources: [

    // your event source
    {
      events: (start, end, timezone, callback) => {

        var data = [];


        data.push(new Date("2019-04-11T00:19:02"))
        data.push(new Date("2019-04-12T00:19:02"))
        data.push(new Date("2019-04-13T00:19:02"))

        var eventData = [];

        var calendarEvents: CalendarEvents = new CalendarEvents();
        calendarEvents.start = data[0];

        //Change end time, because of when end date time is greator than 23:59:59 then end date not marked
        var m = moment(data[data.length - 1], 'ddd MMM D YYYY HH:mm:ss ZZ');
        m.set({ h: new Date().getHours() });
        calendarEvents.end = m.toDate();

        calendarEvents.allDay = false;
        eventData.push(calendarEvents);

        callback(eventData);
      },
      color: '#f99500',   // an option!
      textColor: 'black', // an option!
      // displayEventTime: false,
    }
    // any other sources...

  ],
  timeFormat: 'HH:mm'
};

`

答案 8 :(得分:-1)

通过设置事件的开始和结束时间来“解决”问题。