2015-03-19 2 views
0

У меня есть Fullcalendar, который показывает события из таблицы mysql (название + дата-время), а также вставляет новые события, нажимая на день в календаре.Вставьте событие с другой датой, отличной от текущей даты на mysql, с Fullcalendar

Проблема в том, что он вставляет события только в текущий день, даже если пользователь нажал на будущую дату или месяц. Я хочу, чтобы пользователь мог вставлять будущие события таким же образом, как и сейчас.

Fullcalendar скрипт, который показывает события (events.php) и вставить, нажав на день (название) отправив эту информацию в «add_event.php»

$(document).ready(function() { 

    var calendar = $('#calendar').fullCalendar({ 
     editable: true, 
     events: "http://localhost/test-fullcalendar/php/eventos.php", 
     lang: "es", 
     selectable: true, 
     selectHelper: true, 

     select: function(start, end, allDay) { 
      var title = prompt('Evento a insertar:'); 
      if (title) { 

       start = moment(event.start).format('YYYY-MM-DD HH:mm:ss'); 
       end = moment(event.end).format('YYYY-MM-DD HH:mm:ss'); 

       $.ajax({ 
        url: 'php/add_evento.php', 
        type: 'POST', 
        data: {title: title, start: start, end: end}, 
        success: function(json) { 
         alert("Evento insertado"); 
         console.log("Enviando: ", title, start, end); 
        } 
       }); 
       calendar.fullCalendar('renderEvent', 
       { 
        title: title, 
        start: start, 
        end: end, 
        allDay: allDay 
       }, 
       true 
       ); 
      } 
      calendar.fullCalendar('unselect'); 
     } 

    }); 

}); 

ответ

0

Вы можете получить текущую выбранную дату с

$("#calendar").fullCalendar('getDate'); 

он возвращает объект даты moment.js

2

Проблема у вас есть то, что вы отменить выбранную дату с объявлением ел, что не существует (event.start) и по умолчанию будет по умолчанию. И когда вы добавляете событие в календарь, оно будет использовать перезаписанные значения вместо того, которое было передано в обратный вызов select.

Перед:

  start = moment(event.start).format('YYYY-MM-DD HH:mm:ss'); 
      end = moment(event.end).format('YYYY-MM-DD HH:mm:ss'); 

      $.ajax({ 
       url: 'php/add_evento.php', 
       type: 'POST', 
       data: {title: title, start: start, end: end}, 
       success: function(json) { 
        alert("Evento insertado"); 
        console.log("Enviando: ", title, start, end); 
       } 
      }); 

После того, как:

  start_ajax = moment(start).format('YYYY-MM-DD HH:mm:ss'); 
      end_ajax = moment(end).format('YYYY-MM-DD HH:mm:ss'); 

      $.ajax({ 
       url: 'php/add_evento.php', 
       type: 'POST', 
       data: {title: title, start: start_ajax, end: end_ajax}, 
       success: function(json) { 
        alert("Evento insertado"); 
        console.log("Enviando: ", title, start_ajax, end_ajax); 
       } 
      }); 
+0

Я добавил '' event'' перед тем '' (старт)'' и '' (конец)'', потому что без '' event' 'Он не может корректно отображать часовой формат, и он показывает только 00:00:00 в консоли, нажав на событие 3march: 'the-title 2015-03-03 00:00:00 2015-03-04 00:00: 00'. Я прочитал документ Fullcalendar и 'HH: mm: ss' - единственный способ получить часовой формат, который мне нужен для моей таблицы mysql (столбец DATETIME). Спасибо за ваш ответ – AvkZ

+0

В обратном вызове 'select' отсутствует переменная 'event', так что вы пытались получить доступ к несуществующей переменной, и поэтому преобразование в DATETIME было выполнено в текущую дату вместо фактической даты, выбранной календарем. Переменная 'event' передается другим обратным вызовам Fullcalendar, но не' select'. – AlexL

+0

Я понимаю, что вы объясняете, но я не вижу, где решение проблемы. Добавляя 'event' как переменную, переданную функции' select', например 'select: function (start, end, event, allDay)', она возвращает только то же самое, а не дату точно события/названия. Спасибо – AvkZ

Смежные вопросы