如何在javascript

时间:2017-08-09 08:52:15

标签: javascript php json date fullcalendar

我和我的团队正在尝试创建一个网站来组织议程(使用Fullcalendar)。

我们有一个我们无法修改的外部数据库和另一个用于项目的数据库。要与外部数据库通信并获取可用性(创建约会)和已经采用的约会,我们必须制作API并获取json文件。 我首先尝试将可用性渲染为事件。

由于我是一名完整的大三学生,我无法转换json文件发送给我的数据。 收到的日期格式是"字符串"而不是日期格式(FulCalendar要求渲染事件)。

我们研究了symfony 2.8

这是我的控制器动作:

public function indexAction()
{

    // parameters
    $datefin = "04-08-2017";
    $centercab = '13';
    $daynum = '5'; // number of days in the week (5,6 or 7)

    if($daynum==5){
        $weekend = 'false';
    } else {
        $weekend = 'true';
    }

    //We take the date of the begining of the week end the ending to initialize the rendering of the calendar 

    $ddate= new \DateTime();
    $endweek= clone $ddate;

    // we add 5 or 7 days according to the pros parameters for the week vue
    $endweek->modify('+'. $daynum .' day');

    // We change de date format of the day date and the end of the week date 
    $ddate= $ddate->format('d-m-Y');
    $endweek= $endweek->format('d-m-Y');

    // print the date to check
    print  "du " . $ddate. " au " . $endweek . "</br>";

    $motif_referent_cab = '238'; // number of the motive in the external DB

    $req = "http://connect.mydb.com/availability?center=".$centercab."&motive=".$motif_referent_cab."&datesince=".$ddate."&timesince=00:00&maxresults=50";

    // read and decode .json file
    $weekdates = file_get_contents($req);
    $weekdatesjson = json_decode($weekdates, true);
   // var_dump($weekdatesjson["data"]);

    $i=0;
    $eventstab =Array();
    foreach ($weekdatesjson["data"] as $key=>$value){       // $value refers to arrays (with dates as index) contained in the array "dispo"
        foreach ($value as $value1){                        // $value1 refers to hours of availabilities (dispo) in arrays (dates)
            $eventstab[$i] =  "{title: 'Dispo', start: '".$ddate."T".$value1.":00'},";

            $i++;
        }
    }
    $lesdispos = implode($eventstab);

    return $this->render(MyBundle:Default:index.html.twig',
        array(
            'Date_jour'=>$ddate,
            'lesdispos'=>$lesdispos  // variable 'lesdispos' client side will contain the data of'$lesdispos', that is on server side.
        )
    );            
}

这是我的calendar.js文件:

<!-- Page specific script -->
$(document).ready(function(){

/* --------------------------------------------- */
/* ---------- Initialize the calendar ---------- */
/* --------------------------------------------- */

// Date for the calendar events (dummy data)
var date = new Date();
var d = date.getDate(),
    m = date.getMonth(),
    y = date.getFullYear();

  $('#calendar').fullCalendar({
    lang: 'fr',
    defaultView: 'agendaWeek',

    editable: true,
    selectable: true,
    selectHelper: true,

    /*        aspectRatio: 1,*/
    /*defaultDate: new Date(),*/
    slotDuration: '00:15:00',
    slotLabelInterval: '00:15:00', // marque l'intervalle de temps sur axe des y à gauche
    snapDuration: '00:15:00',

    minTime: '07:00:00', // heure de début du calendrier
    maxTime: '19:00:00', // Heure de fin du calendrier

    axisFormat: 'HH:mm',
    timeFormat: 'HH(:mm)',
    slotLabelFormat:"HH:mm",
    columnFormat: 'ddd D/MM',

    eventLimit: true, // allow "more" link when too many events
    defaultTimedEventDuration: '00:15:00', // Durée d'un rendez vous par défaut

    header: {
        left: 'prevYear,prev,next,nextYear today',
        center: 'title',
        right: 'agendaWeek,agendaDay, listDay'
    },

    buttonText: {
        today: "Aujourd'hui",
        month: 'Mois',
        week: 'Semaine',
        day: 'Jour',
        mois: 'Mois',
        annee: 'Année',
        listDay: 'Planning'
    },

    // Random default events
    events: [
        disponibilities
    ]
  });
});


var disponibilities = document.getElementById('disponibilities').getAttribute('data-disponibility');
console.log(disponibilities);

我使用隐藏的div传递信息:

<div id="calendar"></div>
<div class="visually-hidden" data-disponibility="{{ lesdispos }}" id="disponibilities"></div>

我在我的控制台中收到了这个:

{title: 'Dispo', start: '09-08-2017T10:10:00'},{title: 'Dispo', start: '09-08-2017T10:40:00'},{title: 'Dispo', start: '09-08-2017T11:00:00'},{title: 'Dispo', start: '09-08-2017T11:10:00'},{title: 'Dispo', start: '09-08-2017T11:30:00'}

我有这个错误: error in my console

我们假设给fullcalendar的格式不是一个好的格式。如果我们正在寻找好的方向,有人会有想法吗?如果是的话,解决方案可以取悦什么?

1 个答案:

答案 0 :(得分:0)

$ddate= $ddate->format('d-m-Y');

是个问题。我认为你应该把它改成

$ddate= $ddate->format('Y-m-d');

以便日期采用fullCalendar理解的格式。

根据https://fullcalendar.io/docs/utilities/Moment/,您可以使用以下格式的字符串:

  • ISO日期字符串(Y-m-d将为您生成日期部分 目的)
  • Unix时间戳。