将事件开始日期从FullCalendar更新到我的数据库中的时间为00:00:00

时间:2020-05-09 05:14:07

标签: javascript php ajax codeigniter fullcalendar

我正在使用FullCalendar,并试图在用户将事件拖放到我的日历中时更新事件开始时间。这是我使用的附加到eventDrop回调(https://fullcalendar.io/docs/eventDrop)上的代码:

        alert(info.event.id + ' was dropped on ' + info.event.start);
        $.ajax({
          url: '/Post/dropPost',
          type: 'POST',
          data: { 'postSchedule': info.event.start, 'postId' : info.event.id },
        });
       },

这与警报显示正确的事件ID和正确的开始日期一样有效(采用以下格式:Tue May 05 2020 04:36:00)。也会调用'/ Post / dropPost'方法,并且可以正确传递postId变量。

但是,当它更新我的数据库时,postSchedule总是更新为“ 00:00:00 00:00:00”。

这是我的dropPost方法:

    public function dropPost() 
    {
        $data=[];
        $postSchedule = $_POST['postSchedule'];
        $postId = $_POST['postId'];
        $droppedPost = new PostModel;
        $data['id'] = $postId;
        $data['postSchedule'] = $postSchedule;
        $droppedPost->save($data);
    }

通过阅读FullCalendar文档,我了解到日期应始终为ISO8601标准:https://fullcalendar.io/docs/date-parsing。那么为什么它不转换为我的数据库。

我数据库中的postSchedule列是DateTime。

2 个答案:

答案 0 :(得分:1)

我终于找到了答案。我需要在info.event.start属性上使用.toISOString()。

工作代码如下:

 eventDrop: function(info) {
    alert(info.event.id + ' was dropped on ' + info.event.start);
    $.ajax({
      url: '/Post/dropPost',
      type: 'POST',
      data: { 'postSchedule': info.event.start.toISOString(), 'postId' : info.event.id },
    });
   },

答案 1 :(得分:0)

我认为问题是您没有将postSchedule转换为正确格式存储在database中。

控制器

首先,检查print_r($this->input->post())是否正在检索数据。
如果是,则以正确的格式(即$data['postSchedule'] = date("Y-m-d H:i:s", strtotime($postSchedule));转换数据,然后将数据存储在database中,类型为{ {1}}。
希望对您有帮助。