如何将日期关联数组转换为jQuery中flatpickr的对象

问题描述:

我一直在试图弄清楚这几个小时,并没有得到任何地方。如何将日期关联数组转换为jQuery中flatpickr的对象

好的,所以我有一个数据库表,它使用开始日期和结束日期来节省员工假期,所以它是一个范围。如果是一天,它将是同一日期,但通常是一个范围。

我在我的网站上使用Flatpickr来预订特定日期和时间的工作,但我需要禁用所选职员不可用的日期。当用户选择一个职员时,会对数据库中的假期表进行ajax调用,并获取任何假期日期,并将其放入数组中,然后将其返回给JSON中的ajax。这是我的电话($(this).val()指员工下拉列表中,这将在改变运行):

var staffId = $(this).val(); 
var dateObj = {}; 
var parsed; 

$.post('/get-availability', { staff_id: staffId } 
).done(function(response) { 
    if(response.length > 0) { 
     parsed = JSON.parse(response); 
     $.each(parsed, function(i, element) { 
      console.log("i : " + i); 
      dateObj = { from : element['from'], to : element['to'] }; 
     }); 

    } 

在获取可用性的PHP如下:

$staff_id = $request->get('staff_id'); 
$staff_entity = $this->getDoctrine()->getManager()->getRepository('AppBundle:Staff')->findOneBy(array('id' => $staff_id)); 
// get all holidays for the staff member 
$holiday_repo = $this->getDoctrine()->getManager()->getRepository('AppBundle:Holiday'); 
$holidays = $holiday_repo->findBy(array('staff' => $staff_entity)); 
$result = array(); 
if(!empty($holidays)) { 
    $x = 0; 
    foreach ($holidays as $row) { 
     $result[$x]['from'] = $row->getStartDate()->format('Y-m-d'); 
     $result[$x]['to'] = $row->getEndDate()->format('Y-m-d'); 
     $x ++; 
    } 
} 

return new Response(json_encode($result)); 

即将回到阿贾克斯,我需要布置我flatpickr配置如下(日期只是一个例子):

disable: [ 
    { 
     from: "2017-04-01", 
     to: "2017-06-01" 
    }, 
    { 
     from: "2017-09-01", 
     to: "2017-12-01" 
    } 
] 

但我的选项dateObj将获得每次重写,所以它只会增加的最后日期范围:

var config = { 
    disable: [ 
     dateObj 
    ] 
}; 

基本上,我需要知道如何正确地适应$。每个循环,以获得上述像第一个例子中的结果,但没有任何工程。到目前为止,我已经试过:

dateObj += { from : element['from'], to : element['to'] }; 
dateObj.i = { from : element['from'], to : element['to'] }; 

然后使其成为一个数组,并试图:

dateObj[i] = { from : element['from'], to : element['to'] }; 
JSON.stringify(dateObj) 

但是每一个失败。我希望有人能帮助我!

好的,最后我使用了DatePeriod()函数,并将所有日期传回单个数组,而不是在fromto块中。不完全是最优化的版本,但它的工作原理。

foreach ($holidays as $row) { 
    $start_date = new \DateTime($row->getStartDate()->format('Y-m-d')); 
    $end_date = new \DateTime($row->getEndDate()->format('Y-m-d')); 
    $date_range = new \DatePeriod($start_date, new \DateInterval('P1D'), $end_date); 
    foreach($date_range as $date){ 
     $date_array[] = $date->format('Y-m-d'); 
    } 
    // Add the end date as this is not included in the date period. 
    $date_array[] = $row->getEndDate()->format('Y-m-d'); 
} 

$date_array然后被编码并传回给它进行解析,并添加到flatpickr的配置阿贾克斯。