javascript - date.getDate() är inte en funktion. (I 'date.getDate()', 'date.getDate()' är odefinierad) FullCalendar i Ionic 3


Jag kodar på ett Ionic 3-projekt där jag använder ett FullCalendar-plugin för att visa ett kalendergränssnitt. Jag har ett problem med denna kod i sidans modul när jag försöker ändra bakgrunden för en enskild dag i kalendern. Jag har använt FullCalendars dayRender-funktion.

$('#calendar').fullCalendar({

            dayRender: function (date, cell) {
              var today = new Date('2017-09-11T00:40Z')
              if (date.getDate() == today.getDate()) {
                  this.cell.css("background-color", "red");
              }
            },
});

Jag har detta körfel i utdata:

date.getDate() är inte en funktion. (I 'date.getDate()', 'date.getDate()' är odefinierad) FullCalendar i Ionic 3

så jag förstår inte varför, eftersom date är ett Date-objekt som redan var definierat i FullCalendar-biblioteket.

Några lösningar?

ps: Förlåt för min dåliga engelska.

Svar #1

Dokumentationen av dayRender-callbacken på https://fullcalendar.io/docs/v3/dayRender säger

date är ögonblicket för den givna dagen.

Så date i din kod är ett momentJS-objekt, inte ett Date-objekt. Det är därför metoden getDate inte finns på det. Det vore bättre att skapa today som ett momentJS-objekt också, och sedan kan du jämföra dem direkt:

$('#calendar').fullCalendar({
  dayRender: function (date, cell) {
    var today = moment('2017-09-11T00:00Z');
    if (date.isSame(today, "day")) {
      cell.css("background-color", "red");
    }
  },
  //...
});

För mer detaljerad information om koden jag har skrivit, se http://momentjs.com/docs/#/parsing/string/ för detaljer om datum som momentkonstruktor kan tolka, och http://momentjs.com/docs/#/query/is-same/ för detaljer om datumsjämförelsemetoden.

Du kan se ett fungerande exempel på ovanstående här: http://jsfiddle.net/sbxpv25p/22/