date.getDate() не является функцией. (В 'date.getDate()', 'date.getDate()' не определено) FullCalendar в Ionic 3

Я кодирую проект Ionic 3, где использую плагин FullCalendar для отображения пользовательского интерфейса календаря. У меня проблема с этим кодом в модуле страницы, когда я пытаюсь изменить фон одного дня в календаре. Я использовал функцию dayRender из FullCalendar.

$('#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");
              }
            },
});

У меня есть эта ошибка времени выполнения на выходе:

date.getDate() не является функцией. (В 'date.getDate()', 'date.getDate()' не определено) FullCalendar в Ionic 3

поэтому я не понимаю, почему, потому что дата - это объект Date, который уже был определен в библиотеке FullCalendar.

Любые решения?

ps: Извините за мой плохой английский.


person Lamoichenzio    schedule 18.09.2017    source источник
comment
данные != дата ...и... getData != getDate   -  person Lennholm    schedule 18.09.2017
comment
извините, я хочу сказать объект даты   -  person Lamoichenzio    schedule 18.09.2017
comment
Но ваша ошибка в том, что data . getData не является функцией   -  person Lennholm    schedule 18.09.2017
comment
чувак, моя ошибка, я редактирую вопрос. Прости   -  person Lamoichenzio    schedule 18.09.2017


Ответы (1)


Документация по обратному вызову dayRender на https://fullcalendar.io/docs/display/dayRender/ говорит

date – это Момент для данного дня.

Итак, date в вашем коде — это объект momentJS, а не объект Date. Вот почему на нем не существует метода getDate. Вам также лучше создать today как объект momentJS, а затем вы можете сравнить их напрямую:

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

Для получения более подробной информации о коде, который я написал, см. http://momentjs.com/docs/#/parsing/string/ для подробной информации о датах, которые может анализировать конструктор момента, и http://momentjs.com/docs/#/query/is-same/ для получения подробной информации о методе сравнения дат.

Вы можете увидеть рабочий пример приведенного выше здесь: http://jsfiddle.net/sbxpv25p/22/

person ADyson    schedule 19.09.2017
comment
Кроме того, мы можем добавить, что вы можете сгенерировать реальную сегодняшнюю дату в момент, вызвав moment без каких-либо аргументов. - person ADreNaLiNe-DJ; 19.09.2017
comment
Я уже читал, что дата - это объект momentJs, как говорится в документе, но в моей среде IDE для функционального дня рендеринг говорит: (свойство) dayRender: (дата: дата, ячейка: HTMLTableDataCellElement). На самом деле, если я использую ваш код, date.isSame(сегодня) не работает, потому что дата не является объектом momentJS (по крайней мере, согласно IDE). - person Lamoichenzio; 19.09.2017
comment
Я использую VisualStudio Code, и теперь ваш последний код что-то работает (в любом случае IDE возвращает ошибку), а что-то не работает. Я не знаю, как обновить VS C, но я должен это исправить. В любом случае ошибка: Свойство «isSame» не существует для типа «Date». Свойство «css» не существует для типа «HTMLTableDataCellElement», но какое-то время работает, а какое-то нет.... lol В любом случае, спасибо, чувак - person Lamoichenzio; 19.09.2017
comment
вы можете просто проигнорировать эти ошибки и запустить код, верно? Это просто предупреждение IDE. Или вы каким-то образом настроили его, чтобы вы не могли запустить его, пока не исчезнут все предупреждения/ошибки? (Извините, я недостаточно знаю VS Code, чтобы понять, как его можно настроить). А что значит что-то не работает? У вас есть проблема, когда вы запускаете его по-настоящему или нет? Если да, то опишите его. Как вы можете видеть из JSFiddle, который я опубликовал, то, что я написал, должно работать. Так что если у вас проблема, то либо вы не правильно скопировали, либо что-то еще мешает. Так что нам понадобится эта деталь, чтобы исправить это. - person ADyson; 19.09.2017
comment
еще одна ошибка, которая, как я думаю, относится только к часовому поясу, заключается в том, что день, в который изменяется цвет, является днем, предшествующим тому, что написано сегодня. - person Lamoichenzio; 19.09.2017
comment
извините, мужчины, я хочу сказать, что иногда работает, а иногда не работает. В любом случае, я могу игнорировать эту ошибку, но очень раздражаю. - person Lamoichenzio; 19.09.2017
comment
Я думаю, вы правы насчет часового пояса или, по крайней мере, что-то связанное: var today = moment('2017-09-11T00:00Z'); это исправит. Обновили ответ. Конечно, я должен также указать, что сегодня не очень хорошее имя для переменной, так как дата жестко запрограммирована :-). Если вы действительно хотите, чтобы он динамически использовал сегодняшнюю дату, тогда просто var today = moment(); сделает это - person ADyson; 19.09.2017
comment
хорошо, я нашел причину проблемы. я не знаю почему, но хотя я установил выпуск 3.5.1 FullCalendar, IDE (VS, но также и Atom) распознает старую версию FullCalendar, в которой функция dayRender принимает объект Date. Для решения этой проблемы я создал переменную момента в функции с датой (вводом dayRender) в качестве аргумента. В настоящее время работает. у меня все еще есть проблемы с cell.css, но теперь сравнение между датами работает. - person Lamoichenzio; 19.09.2017
comment
Возможно, он читал какую-то старую версию, установленную на вашем компьютере, или из какого-то онлайн-источника, на который он был настроен. В чем проблема с cell.css? В вашем оригинале это было неправильно, но я исправил это в своем ответе (this.cell.css должно быть просто cell.css) - person ADyson; 19.09.2017
comment
я использовал cell.css, но у меня есть эта ошибка: [ts] свойство «css» не существует для типа «HTMLTableDataCellElement». В отладке в браузере после того, как эта ошибка сработает и изменит цвет дня, но если я хочу отладить на телефоне, у меня будет ошибка во время компиляции, и поэтому она не работает. я также обновил машинопись, но ничего - person Lamoichenzio; 19.09.2017
comment
Странно, в JSFiddle ошибка вообще не возникает. И cell - это объект jQuery, а не элемент HTML. Я использую JS, а не машинописный текст, так что, возможно, это связано с этим. Возможно, машинописный текст что-то не так делает при компиляции, это трудно понять. Браузеры телефонов не одинаковы, поэтому может помочь тестирование операционных систем разных браузеров. Но большинство запустит jQuery без проблем. Это снова ошибки IDE или реальные ошибки времени выполнения в консолях браузера? - person ADyson; 19.09.2017
comment
У меня ошибка как в IDE, так и во время выполнения в браузере, но после закрытия ошибка в браузере работает. - person Lamoichenzio; 19.09.2017
comment
Я не могу помочь вам так много, не зная гораздо больше деталей. Моя версия работает, поэтому трудно понять, что не так. - person ADyson; 19.09.2017
comment
Ошибка вызвана ошибкой, аналогичной предыдущей. Это функция dayRender: функция (дата, ячейка), которая в последнем выпуске принимает дату (объект момента) и ячейку (объект jquery). В моем проекте я не знаю, почему, но ячейка является HtmlTableDateCellElement, поэтому свойство .css объекта jquery не работает. Итак, в функции dayRender я определил новую переменную jcell = $(cell), которая создала новый объект jquery jcell из аргументной ячейки. Теперь все работает без проблем, но я не понимаю, почему у меня такая проблема с этой библиотекой. Еще раз спасибо за потраченное время. - person Lamoichenzio; 19.09.2017
comment
Без проблем. Но это снова ошибка IDE из-за того, что IDE пытается вывести типы из старой версии библиотеки. Это не должно вызывать каких-либо ошибок в самом браузере, если браузер ссылается на последнюю версию fullCalendar. Я действительно не понимаю, почему браузер тоже получает ошибки, но это так. - person ADyson; 19.09.2017