Метод Fullcalendar v5 «dateClick» отключен на день?

#javascript #fullcalendar #fullcalendar-5

#javascript #полный календарь #fullcalendar-5

Вопрос:

Я использую FullCalendar v5. У меня здесь есть скрипка. Когда я пишу это, сейчас октябрь 2020 года. Если я зайду в календарь на скрипке и нажму на воскресенье, 4 октября dateClick , метод отправит окно предупреждения с датой на субботу, 3 октября. Я что-то неправильно настроил?

Редактировать

Позвольте мне описать это по-другому. На странице скрипки (возможно, вам придется значительно увеличить размер выходного экрана) отображается представление месяца. Есть блоки дат с событиями, а некоторые без. Выберите ячейку даты без событий и щелкните в ячейке.

Когда я делаю это (несколько разных браузеров на платформах Windows и Linux и pixel phone) dateClick , функция запускается, и появляется предупреждение javascript, сообщающее о info.date значении в функции. Я ожидаю, что будет отображена дата выбранного элемента. То, что я вижу, — это дата дня, предшествующего ячейке дня, которую я нажимаю.

Это поведение может отличаться, если щелкнуть в ячейке со списком событий. В ячейках, в которых так много событий, что переполнение скрыто строкой » n больше», если вы нажмете на строку » n», появится небольшое всплывающее окно с дополнительными элементами и правильной датой во всплывающем окне. Вместо этого щелкните в той же ячейке даты вдали от событий, и появится предупреждение с отображением даты предыдущего дня.

Функция dateClick:

 dateClick: function(info) {
  window.alert(`dateClick: ${info.date.toString()}`);
},
  

Вот что я получаю после нажатия на 4 октября:
введите описание изображения здесь

Комментарии:

1. Скрипка не воспроизводит эту проблему для меня. Может быть, у вас какая-то проблема с часовым поясом?

2. Извините, но я все еще не могу воспроизвести его — смотрите Мои результаты на i.imgur.com/U9Dl6PI.gif . Какой точный вывод вы получаете в каждом предупреждении? Мне все еще интересно, есть ли какая-то проблема с часовым поясом. Не могу придумать, что еще это может быть.

3. Как я и подозревал, это проблема с часовым поясом. 3 октября 1900 CDT совпадает с 4 октября 0000 UTC. FullCalendar сообщает вам время в UTC. Ваш браузер перевел, что в местный часовой пояс, когда вы преобразовать в строки в объект Date (следовательно, почему я вижу дату «правильно», потому что мой часовой пояс (по британскому летнему времени) будет 1 час опережает время в формате UTC).

4. Я не знаю наверняка (поскольку я его не писал), но я подозреваю, что именно поэтому объект info также предоставляет вам чисто строковое свойство, dateStr содержащее только часть даты, которая, надеюсь, правильно обработана, чтобы дать вам физически выбранную дату независимо от вашего часового пояса — попробуйте эту версию и посмотрите, есть лион выполняет свою работу: jsfiddle.net/42mfzvy8 (Я не могу легко проверить результаты по очевидным причинам!).

5. Нет, параметр часового пояса влияет на вещи, но, возможно, не совсем так, как вы ожидаете — см. fullcalendar.io/docs/date-object для получения более подробной информации. Статья о часовом поясе также немного объясняет

Ответ №1:

Ответ действительно @ADyson: FC использует даты UTC, и я неправильно их интерпретировал.