2012-03-25 3 views
0

В настоящее время у меня есть следующий высокий уровень, который отображает дату начала и выводит значения для следующих 31 дней данных. Кто-нибудь знает, как я могу улучшить это, чтобы включить и завершить дату, чтобы я мог фильтровать данные меньшими конкретными суммами? На оси х я также пытаюсь отображать только метки, на которые есть данные, прикрепленные к ним, и скрыть любые другие. Любая помощь приветствуется.Alter highchart output to display start-end date

Мой код выглядит следующим образом:

<script type="text/javascript"> 
    var chart; 
    $(document).ready(function() { 
     chart = new Highcharts.Chart({ 
      chart: { 
       renderTo: 'container', 
       type: 'line', 
       marginRight: 130, 
       marginBottom: 25 
      }, 
      title: { 
       text: '<?php echo $type ?>', 
       x: -20 //center 
      }, 
      xAxis: { 
       categories: [ <? php 
       $start = $_POST["dateStart"]; 

       $dates = array(); 

       for ($i = 0, $days = date('t', strtotime($start)); $i < $days; ++$i) { 
        $dates[] = date('Y-m-d', strtotime($start.' + '.$i.' day')); 
       } 
       echo "'".implode("', '", $dates)."'"; ?> ] 
      }, 
      yAxis: { 
       title: { 
        text: 'Total Amount' 
       }, 
       plotLines: [{ 
        value: 0, 
        width: 1, 
        color: '#808080' 
       }] 
      }, 
      tooltip: { 
       formatter: function() { 
        return '<b>' + this.series.name + '</b><br/>' + this.x + ': ' + this.y; 
       } 
      }, 
      legend: { 
       layout: 'vertical', 
       align: 'right', 
       verticalAlign: 'top', 
       x: -10, 
       y: 100, 
       borderWidth: 0 
      }, 
      series: [ <? php 
      foreach($array as $legend = > $data) { 
       echo '{'; 
       echo "name: '".$legend."',"; 
       $values = array(); 
       for ($i = 0; $i < $days; ++$i) { 
        $date = date('Y-m-d', strtotime($start.' + '.$i.' day')); 
        $values[] = isset($data[$date]) ? $data[$date] : 0; 
       } 
       echo 'data: ['.implode(', ', $values).'],'; 

       echo '},'; 
      } ?> ] 
     }); 
    }); 

Благодарности

ответ

0

Пожалуйста, обратите внимание, что следующее не является безопасным. Вы должны ВСЕГДА проводить проверку работоспособности данных, представленных пользователем.

xAxis: { 
     categories: [ <? php 
     $start = $_POST["dateStart"]; 
     $end = $_POST["dateEnd"]; 

     $dates = array(); 
     $current=$start; 

     while($current<=$end){ 
      $dates[]=$current; 
      $current=date('Y-m-d', strtotime($current.' + 1 day')); 
     } 

     echo "'".implode("', '", $dates)."'"; ?> ] 
    },