web-dev-qa-db-de.com

Das Enddatum des Kalenders ist um einen Tag falsch

Ich mache eine von FullCalendar unterstützte Fahrzeugreservierungsfunktion ... Dies ist die Coffescript-Datei.

    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

Und das ist JSON-Feed mit den Ereignissen.

[{"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}]

Das end Datum ist 2014-12-21, aber dies ist das, was ich im Kalender habe enter image description here

Die Dokumentation sagt etwas dazu aus (denke ich):

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!

Aber ich bin nicht ganz sicher, was ich mit diesen Informationen anfangen soll ...

21
Cássio Godinho

Ich denke, das Schlüsselwort in den Anweisungen ist exclusive, also wird die Uhrzeit, die Sie angeben, nicht in den Datumsbereich aufgenommen.

In Ihrem Fall würde "2014-12-21T00:00:00.000Z" bedeuten, dass das Ereignis am Anfang von 12-21 nicht mehr existiert. Wenn Sie möchten, dass das Ereignis 12-21 durchläuft, möchten Sie die Endzeit auf "2014-12-22T00:00:00.000" setzen (erste mögliche Zeit in 12-22).

8
Shaded

Ich hatte das gleiche Problem und habe es endlich herausgefunden.

Ich habe den ganzen Tag TRUE verwendet, wie in der Dokumentation beschrieben, wenn Sie den ganzen Tag True verwenden, wird es sich rechtzeitig verhalten.

also habe ich zuerst den ganzen Tag auf FALSE umgestellt 

an meinem Endtag habe ich $ endDate hinzugefügt. "T23: 59: 00";

Das hat bei mir funktioniert.

2
user3440787

Ich hatte das gleiche Problem, aber ich experimentierte mit der Zeit und das war die Lösung :)

2014-12-21T00: 00: 00 => 2014-12-21T23: 59: 00 Dadurch wird Ihr Problem gelöst.

1
Elvis Hajdar

Der beste Teil ist 20:00:00 an das Enddatum wie folgt anzufügen: 

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

Das ist alles was du brauchst.

1

"Problem" behoben, indem Start- und Endzeit für die Ereignisse festgelegt wurden.

0
Cássio Godinho

Ich weiß nicht, ob es noch nützlich ist, aber Sie können diese Methode verwenden. Fügen Sie Ihrem Enddatum einen Tag hinzu mit

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

dadurch wird Ihr Enddatum um einen Tag erhöht.

0
Hamza

Ich stand auch vor dem gleichen und löste es durch Hinzufügen von "T23:59:00" zum Enddatum, d. H. "end" => $end_date."T23:59:00"

0
Shafiq

Wenn Sie Ihr Enddatum auf 0 Stunden, Minuten, Sekunden usw. vom 21.12.2014 einstellen, gibt es an diesem Tag keine Zeit für die Anzeige einer Veranstaltung. 

Möglicherweise müssen Sie Ihr Enddatum auf 0 Stunden des nächsten Tages vorschieben, da Sie das Ereignis als ganztägiges Ereignis eingerichtet haben. Es kann jedoch auch sinnvoll sein, die Zeit um einen beliebigen Betrag (z. B. eine Stunde) zu erhöhen, sodass das Ereignis fällt innerhalb des gewünschten Enddatums und dann ein ganztägiges Ereignis, das es wiedergeben soll.

Es wäre schön, wenn das Ereignisobjekt einen Parameter für die Dauer enthalten würde, den Sie festlegen können. Zumindest habe ich keinen in ihrer Dokumentation angezeigt.

0
Ryan McArthur

Sie müssen nextDayThreshold einstellen: '00: 00 'und der letzte Tag wird angezeigt!

0
Sam Pritchard

In AngularÄndern Sie die Enddatumzeit mit der aktuellen Zeit, wenn die Enddatumzeit größer als 23:59:59 ist. `

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'
};

`

0
Anand