php实现按天数、星期、月份查询的搜索框
2016-08-25来源:

本文实例为大家分享了php实现按天数、星期、月份查询的搜索框,搜索时候展示数据的统计图,主要展示图形的效果,供大家参考,具体内容如下

1.ajax.php 

<?php

    $year = $_GET['y'];

    if(!isset($_GET['m'])){

       $month=1;

    }else{

         $month = $_GET['m'];

    }

    $week_arr = getMonthWeekArr($year, $month);

    echo json_encode($week_arr);

    die;

  /**

 * 获得系统某月的周数组,第一周不足的需要补足

 * 

 * @param int $current_year

 * @param int $current_month

 * @return string[][]

 */

function getMonthWeekArr($current_year, $current_month){

  //该月第一天

  $firstday = strtotime($current_year.'-'.$current_month.'-01');

  //该月的第一周有几天

  $firstweekday = (7 - date('N',$firstday) +1);

  //计算该月第一个周一的时间

  $starttime = $firstday-3600*24*(7-$firstweekday);

  //该月的最后一天

  $lastday = strtotime($current_year.'-'.$current_month.'-01'." +1 month -1 day");

  //该月的最后一周有几天

  $lastweekday = date('N',$lastday);

  //该月的最后一个周末的时间

  $endtime = $lastday-3600*24*($lastweekday%7);

  $step = 3600*24*7;//步长值

  $week_arr = array();

  for ($i=$starttime; $i<$endtime; $i= $i+3600*24*7){

    $week_arr[] = array('key'=>date('Y-m-d',$i).'|'.date('Y-m-d',$i+3600*24*6), 'val'=>date('Y-m-d',$i).'~'.date('Y-m-d',$i+3600*24*6));

  }

  return $week_arr;

}

2.datehelper.php 

<?php

 //获得系统年份数组

/**

 * 

 * @return string[]

 */

function getSystemYearArr(){

  $year_arr = array('2010'=>'2010','2011'=>'2011','2012'=>'2012','2013'=>'2013','2014'=>'2014','2015'=>'2015','2016'=>'2016','2017'=>'2017','2018'=>'2018','2019'=>'2019','2020'=>'2020');

  return $year_arr;

}

/**

 * 获得系统月份数组

 * 

 * @return array

 */

function getSystemMonthArr(){

  $month_arr = array('1'=>'01','2'=>'02','3'=>'03','4'=>'04','5'=>'05','6'=>'06','7'=>'07','8'=>'08','9'=>'09','10'=>'10','11'=>'11','12'=>'12');

  return $month_arr;

}

/**

 * 获得系统周数组

 * 

 * @return string[]

 */

function getSystemWeekArr(){

  $week_arr = array('1'=>'周一','2'=>'周二','3'=>'周三','4'=>'周四','5'=>'周五','6'=>'周六','7'=>'周日');

  return $week_arr;

}

/**

 * 获取某月的最后一天

 * 

 * @param int $year

 * @param int $month

 * @return number

 */

function getMonthLastDay($year, $month){

  $t = mktime(0, 0, 0, $month + 1, 1, $year);

  $t = $t - 60 * 60 * 24;

  return $t;

}

/**

 * 获得系统某月的周数组,第一周不足的需要补足

 * 

 * @param int $current_year

 * @param int $current_month

 * @return string[][]

 */

function getMonthWeekArr($current_year, $current_month){

  //该月第一天

  $firstday = strtotime($current_year.'-'.$current_month.'-01');

  //该月的第一周有几天

  $firstweekday = (7 - date('N',$firstday) +1);

  //计算该月第一个周一的时间

  $starttime = $firstday-3600*24*(7-$firstweekday);

  //该月的最后一天

  $lastday = strtotime($current_year.'-'.$current_month.'-01'." +1 month -1 day");

  //该月的最后一周有几天

  $lastweekday = date('N',$lastday);

  //该月的最后一个周末的时间

  $endtime = $lastday-3600*24*($lastweekday%7);

  $step = 3600*24*7;//步长值

  $week_arr = array();

  for ($i=$starttime; $i<$endtime; $i= $i+3600*24*7){

    $week_arr[] = array('key'=>date('Y-m-d',$i).'|'.date('Y-m-d',$i+3600*24*6), 'val'=>date('Y-m-d',$i).'~'.date('Y-m-d',$i+3600*24*6));

  }

  return $week_arr;

}

 /**

   * 处理搜索时间

   */

 function dealwithSearchTime($search_arr=''){

    //初始化时间

    //天

    if(!isset($search_arr['search_time'])){

      $search_arr['search_time'] = date('Y-m-d', time()- 86400);

    }

    $search_arr['day']['search_time'] = strtotime($search_arr['search_time']);//搜索的时间

    //周

    if(!isset($search_arr['searchweek_year'])){

      $search_arr['searchweek_year'] = date('Y', time());

    }

    if(!isset($search_arr['searchweek_month'])){

      $search_arr['searchweek_month'] = date('m', time());

    }

    if(!isset($search_arr['searchweek_week'])){

      $search_arr['searchweek_week'] = implode('|', getWeek_SdateAndEdate(time()));

    }

    $weekcurrent_year = $search_arr['searchweek_year'];

    $weekcurrent_month = $search_arr['searchweek_month'];

    $weekcurrent_week = $search_arr['searchweek_week'];

    $search_arr['week']['current_year'] = $weekcurrent_year;

    $search_arr['week']['current_month'] = $weekcurrent_month;

    $search_arr['week']['current_week'] = $weekcurrent_week;

    //月

    if(!isset($search_arr['searchmonth_year'])){

      $search_arr['searchmonth_year'] = date('Y', time());

    }

    if(!isset($search_arr['searchmonth_month'])){

      $search_arr['searchmonth_month'] = date('m', time());

    }

    $monthcurrent_year = $search_arr['searchmonth_year'];

    $monthcurrent_month = $search_arr['searchmonth_month'];

    $search_arr['month']['current_year'] = $monthcurrent_year;

    $search_arr['month']['current_month'] = $monthcurrent_month;

    return $search_arr;

  }

  /**

   * 获取本周的开始时间和结束时间

   * 

   * @param int $current_time

   * @return string

   */

  function getWeek_SdateAndEdate($current_time){

    $current_time = strtotime(date('Y-m-d',$current_time));

    $return_arr['sdate'] = date('Y-m-d', $current_time-86400*(date('N',$current_time) - 1));

    $return_arr['edate'] = date('Y-m-d', $current_time+86400*(7- date('N',$current_time)));

    return $return_arr;

  }

  /**

   * 查询每月的周数组

   */

 function getweekofmonth(){

    $year = $_GET['y'];

    $month = $_GET['m'];

    $week_arr = getMonthWeekArr($year, $month);

    echo json_encode($week_arr);

    die;

  }

3.statistics.php

<?php

/**

 * 统计

 *

 * @abstract

 *

 * @copyright 格里西,2016

 *

 * @author liujun

 *

 * @version Id:statics v1.0 2016/2/5

 */

/**

 * 获得折线图统计图数据

 * 

 * param $statarr 图表需要的设置项

 * @return string

 */

function getStatData_LineLabels($stat_arr){

  //图表区、图形区和通用图表配置选项

  $stat_arr['chart']['type'] = 'line';

  //图表序列颜色数组

  $stat_arr['colors']?'':$stat_arr['colors'] = array('#058DC7', '#ED561B', '#8bbc21', '#0d233a');

  //去除版权信息

  $stat_arr['credits']['enabled'] = false;

  //导出功能选项

  $stat_arr['exporting']['enabled'] = false;

  //标题如果为字符串则使用默认样式

  is_string($stat_arr['title'])?$stat_arr['title'] = array('text'=>"<b>{$stat_arr['title']}</b>",'x'=>-20):'';

  //子标题如果为字符串则使用默认样式

  is_string($stat_arr['subtitle'])?$stat_arr['subtitle'] = array('text'=>"<b>{$stat_arr['subtitle']}</b>",'x'=>-20):'';

  //Y轴如果为字符串则使用默认样式

  if(is_string($stat_arr['yAxis'])){

    $text = $stat_arr['yAxis'];

    unset($stat_arr['yAxis']);

    $stat_arr['yAxis']['title']['text'] = $text;

  }

  return json_encode($stat_arr);

}

/**

 * 获得Column2D统计图数据

 * 

 * @param array $stat_arr

 * @return string

 */

function getStatData_Column2D($stat_arr){

  //图表区、图形区和通用图表配置选项

  $stat_arr['chart']['type'] = 'column';

  //去除版权信息

  $stat_arr['credits']['enabled'] = false;

  //导出功能选项

  $stat_arr['exporting']['enabled'] = false;

  //标题如果为字符串则使用默认样式

  is_string($stat_arr['title'])?$stat_arr['title'] = array('text'=>"<b>{$stat_arr['title']}</b>",'x'=>-20):'';

  //子标题如果为字符串则使用默认样式

  is_string($stat_arr['subtitle'])?$stat_arr['subtitle'] = array('text'=>"<b>{$stat_arr['subtitle']}</b>",'x'=>-20):'';

  //Y轴如果为字符串则使用默认样式

  if(is_string($stat_arr['yAxis'])){

    $text = $stat_arr['yAxis'];

    unset($stat_arr['yAxis']);

    $stat_arr['yAxis']['title']['text'] = $text;

  }

  //柱形的颜色数组

  $color = array('#7a96a4','#cba952','#667b16','#a26642','#349898','#c04f51','#5c315e','#445a2b','#adae50','#14638a','#b56367','#a399bb','#070dfa','#47ff07','#f809b7');

  foreach ($stat_arr['series'] as $series_k=>$series_v){

    foreach ($series_v['data'] as $data_k=>$data_v){

      $data_v['color'] = $color[$data_k];

      $series_v['data'][$data_k] = $data_v;

    }

    $stat_arr['series'][$series_k]['data'] = $series_v['data'];

  }

  //print_r($stat_arr); die;

  return json_encode($stat_arr);

}

/**

 * 获得Basicbar统计图数据

 * 

 * @param array $stat_arr

 * @return string

 */

function getStatData_Basicbar($stat_arr){

  //图表区、图形区和通用图表配置选项

  $stat_arr['chart']['type'] = 'bar';

  //去除版权信息

  $stat_arr['credits']['enabled'] = false;

  //导出功能选项

  $stat_arr['exporting']['enabled'] = false;

  //显示datalabel

  $stat_arr['plotOptions']['bar']['dataLabels']['enabled'] = true;

  //标题如果为字符串则使用默认样式

  is_string($stat_arr['title'])?$stat_arr['title'] = array('text'=>"<b>{$stat_arr['title']}</b>",'x'=>-20):'';

  //子标题如果为字符串则使用默认样式

  is_string($stat_arr['subtitle'])?$stat_arr['subtitle'] = array('text'=>"<b>{$stat_arr['subtitle']}</b>",'x'=>-20):'';

  //Y轴如果为字符串则使用默认样式

  if(is_string($stat_arr['yAxis'])){

    $text = $stat_arr['yAxis'];

    unset($stat_arr['yAxis']);

    $stat_arr['yAxis']['title']['text'] = $text;

  }

  //柱形的颜色数组

  $color = array('#7a96a4','#cba952','#667b16','#a26642','#349898','#c04f51','#5c315e','#445a2b','#adae50','#14638a','#b56367','#a399bb','#070dfa','#47ff07','#f809b7');

  foreach ($stat_arr['series'] as $series_k=>$series_v){

    foreach ($series_v['data'] as $data_k=>$data_v){

      if (!$data_v['color']){

        $data_v['color'] = $color[$data_k%15];

      }

      $series_v['data'][$data_k] = $data_v;

    }

    $stat_arr['series'][$series_k]['data'] = $series_v['data'];

  }

  //print_r($stat_arr); die;

  return json_encode($stat_arr);

}

/**

 * 计算环比

 * 

 * @param array $updata

 * @param array $currentdata

 * @return string

 */

function getHb($updata, $currentdata){

  if($updata != 0){

    $mtomrate = round(($currentdata - $updata)/$updata*100, 2).'%';

  } else {

    $mtomrate = '-';

  }

  return $mtomrate; 

}

/**

 * 计算同比

 * 

 * @param array $updata

 * @param array $currentdata

 * @return string

 */

function getTb($updata, $currentdata){

  if($updata != 0){

    $ytoyrate = round(($currentdata - $updata)/$updata*100, 2).'%';

  } else {

    $ytoyrate = '-';

  }

  return $ytoyrate; 

}

/**

 * 地图统计图

 * 

 * @param array $stat_arr

 * @return string

 */

function getStatData_Map($stat_arr){

  //$color_arr = array('#f63a3a','#ff5858','#ff9191','#ffc3c3','#ffd5d5');

  $color_arr = array('#fd0b07','#ff9191','#f7ba17','#fef406','#25aae2');

  $stat_arrnew = array();

  foreach ($stat_arr as $k=>$v){

    $stat_arrnew[] = array('cha'=>$v['cha'],'name'=>$v['name'],'des'=>$v['des'],'color'=>$color_arr[$v['level']]);

  }

  return json_encode($stat_arrnew);

}

/**

 * 获得饼形图数据

 * 

 * @param array $data

 * @return string

 */

function getStatData_Pie($data){

  $stat_arr['chart']['type'] = 'pie';

  $stat_arr['credits']['enabled'] = false;

  $stat_arr['title']['text'] = $data['title'];

  $stat_arr['tooltip']['pointFormat'] = '{series.name}: <b>{point.y}</b>';

  $stat_arr['plotOptions']['pie'] = array(

    'allowPointSelect'=>true,

    'cursor'=>'pointer',

    'dataLabels'=>array(

      'enabled'=>$data['label_show'],

      'color'=>'#000000',

      'connectorColor'=>'#000000',

      'format'=>'<b>{point.name}</b>: {point.percentage:.1f} %'

    )

  );

  $stat_arr['series'][0]['name'] = $data['name'];

  $stat_arr['series'][0]['data'] = array();

  foreach ($data['series'] as $k=>$v){

    $stat_arr['series'][0]['data'][] = array($v['p_name'],$v['allnum']);

  }

  //exit(json_encode($stat_arr));

  return json_encode($stat_arr);

}

4.theline.php   

<!DOCTYPE>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<!--引入ECharts文件-->

<title>Echarts</title>

<script src="//www.submisscin.com/wap/js/echarts.common.min.js"></script>

</head>

<script src="//www.submisscin.com/wap/js/jquery.js"></script>

<?php include('php/datehelper.php');include('php/statistics.php');?>

<?php

      //获得系统年份

      $year_arr = getSystemYearArr();

      //获得系统月份

      $month_arr = getSystemMonthArr();

      //存储参数

      $search_arr = $_REQUEST;

      $search_arr =dealwithSearchTime($search_arr);

      //获得本月的周时间段

      $week_arr = getMonthWeekArr($search_arr['week']['current_year'],$search_arr['week']['current_month']);

      //天数

      if(!isset($_REQUEST['search_time'])){

        $_REQUEST['search_time'] = date('Y-m-d', time()-86400);

      }

      $search_time = $_REQUEST['search_time'];//搜索的时间

        //周

      if(!isset($_REQUEST['search_time_year'])){

        $_REQUEST['search_time_year'] = date('Y', time());

      }

      if(!isset($_REQUEST['search_time_month'])){

        $_REQUEST['search_time_month'] = date('m', time());

      }

      if(!isset($_REQUEST['search_time_week'])){

        $_REQUEST['search_time_week'] = implode('|', getWeek_SdateAndEdate(time()));

      }

      $current_year = $_REQUEST['search_time_year'];

      $current_month = $_REQUEST['search_time_month'];

      $current_week = $_REQUEST['search_time_week'];

?>

<style>

#search_type{float:left}

#searchtype_day{float:left}

#searchtype_week{float:left}

#searchtype_month{float:left}

</style>

<body>

  <select name="search_type" id="search_type" >

         <option value="day" >按照天统计</option>

         <option value="week" >按照周统计</option>

         <option value="month">按照月统计</option>

    </select>

    <div class="w140" id="searchtype_day">

      <div class='input-group date' id='datetimepicker1'>  

        <input id="stime" class="form-control" type="text" value="<?php echo $search_time;?>" name="search_time">

        <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span> 

      </div> 

    </div>  

     <div id="searchtype_week" style="display:none;">

        <select name="search_time_year" id="searchweek_year">

          <?php foreach ($year_arr as $k=>$v){?>

          <option value="<?php echo $k;?>" <?php echo $current_year == $k?'selected':'';?>><?php echo $v; ?></option>

          <?php } ?>

        </select>

        <select name="search_time_month" id="searchweek_mouth">

          <?php foreach ($month_arr as $k=>$v){?>

          <option value="<?php echo $k;?>" <?php echo $current_month == $k?'selected':'';?>><?php echo $v; ?></option>

          <?php } ?>

        </select>

        <select name="search_time_week" id="searchweek_week">

          <?php foreach ($week_arr as $k=>$v){?>

          <option value="<?php echo $v['key'];?>" <?php echo $current_week == $v['key']?'selected':'';?> ><?php echo $v['val']; ?></option>

          <?php } ?>

        </select>

       </div> 

      <div id="searchtype_month" style="display:none;">

          <select name="search_time_year" class="querySelect">

          <?php foreach ($year_arr as $k=>$v){?>

          <option value="<?php echo $k;?>" <?php echo $current_year == $k?'selected':'';?> ><?php echo $v; ?></option>

          <?php } ?>

        </select>

        <select name="search_time_month" class="querySelect">

          <?php foreach ($month_arr as $k=>$v){?>

          <option value="<?php echo $k;?>" <?php echo $current_month == $k?'selected':'';?>><?php echo $v; ?></option>

          <?php } ?>

        </select>

      </div> 

   <div id="line_chart" style="width:600px;height:400px;"></div>

   <?php $thearray=array(11,11,15,13,12,13,10);?>

   <script type="text/javascript">

    // 基于准备好的dom,初始化echarts实例

    var mylineChart=echarts.init(document.getElementById('line_chart'));

    option1 = {

  title: {

    text: '未来一周气温变化',

    subtext: '纯属虚构'

  },

  tooltip: {

    trigger: 'axis'

  },

  legend: {

    data:['最高气温','最低气温']

  },

  toolbox: {

    show: true,

    feature: {

      dataZoom: {},

      // dataView: {readOnly: false},

      magicType: {type: ['line', 'bar']},

      restore: {},

      saveAsImage: {}

    }

  },

  xAxis: {

    type: 'category',

    boundaryGap: false,

    data: ['周一','周二','周三','周四','周五','周六','周日']

  },

  yAxis: {

    type: 'value',

    axisLabel: {

      formatter: '{value} °C'

    }

  },

  series: [

    {

      name:'最高气温',

      type:'line',

      data:<?php echo(json_encode($thearray)); ?>,

      markPoint: {

        data: [

          {type: 'max', name: '最大值'},

          {type: 'min', name: '最小值'}

        ]

      },

      markLine: {

        data: [

          {type: 'average', name: '平均值'}

        ]

      }

    },

    {

      name:'最低气温',

      type:'line',

      data:[1, 4, 2, 5, 3, 2, 0],

      markPoint: {

        data: [

          {name: '周最低', value: -2, xAxis: 1, yAxis: -1.5}

        ]

      },

      markLine: {

        data: [

          {type: 'average', name: '平均值'}

        ]

      }

    }

  ]

};

    // 使用刚指定的配置项和数据显示图表。

    mylineChart.setOption(option1);

  </script>

  <script>

  //展示搜索时间框

function show_searchtime(){

  s_type = $("#search_type").val();

  $("[id^='searchtype_']").hide();

  $("#searchtype_"+s_type).show();

}

  $(function(){

    show_searchtime();

  $("#search_type").change(function(){

    show_searchtime();

  });

  //更新周数组

  $("[name='search_time_month']").change(function(){

    var year = $("[name='search_time_year']").val();

    var month = $("[name='search_time_month']").val();

    $("[name='search_time_week']").empty();

    $.getJSON('php/ajax.php',{y:year,m:month},function(data){

      if(data != null){

        for(var i = 0; i < data.length; i++) {

          $("[name='search_time_week']").append('<option value="'+data[i].key+'">'+data[i].val+'</option>');

        }

      }

    });

  });

  //更新年数组

    $("[name='search_time_year']").change(function(){

    var year = $("[name='search_time_year']").val();

    $("[name='search_time_week']").empty();

    $("#searchweek_mouth option:first").prop("selected", 'selected'); 

    $.getJSON('php/ajax.php',{y:year},function(data){

      if(data != null){

        for(var i = 0; i < data.length; i++) {

          $("[name='search_time_week']").append('<option value="'+data[i].key+'">'+data[i].val+'</option>');         

        }

      }

    });

  });

  });

  </script>

</body>

</html>

5.time_deal.php

<?php 

//获取系统年份

/**

 * 

 * @return string[]

 */

function getSystemYearArr(){

  $year_arr = array('2010'=>'2010','2011'=>'2011','2012'=>'2012','2013'=>'2013','2014'=>'2014','2015'=>'2015','2016'=>'2016','2017'=>'2017','2018'=>'2018','2019'=>'2019','2020'=>'2020');

  return $year_arr;

}

/**

 * 获得系统月份数组

 * 

 * @return array

 */

function getSystemMonthArr(){

  $month_arr = array('1'=>'01','2'=>'02','3'=>'03','4'=>'04','5'=>'05','6'=>'06','7'=>'07','8'=>'08','9'=>'09','10'=>'10','11'=>'11','12'=>'12');

  return $month_arr;

}

  /**

   * 处理搜索时间

   */

  public function dealwithSearchTime($search_arr){

    //初始化时间

    //天

    if(!$search_arr['search_time']){

      $search_arr['search_time'] = date('Y-m-d', time()- 86400);

    }

    $search_arr['day']['search_time'] = strtotime($search_arr['search_time']);//搜索的时间

    //周

    if(!$search_arr['searchweek_year']){

      $search_arr['searchweek_year'] = date('Y', time());

    }

    if(!$search_arr['searchweek_month']){

      $search_arr['searchweek_month'] = date('m', time());

    }

    if(!$search_arr['searchweek_week']){

      $search_arr['searchweek_week'] = implode('|', getWeek_SdateAndEdate(time()));

    }

    $weekcurrent_year = $search_arr['searchweek_year'];

    $weekcurrent_month = $search_arr['searchweek_month'];

    $weekcurrent_week = $search_arr['searchweek_week'];

    $search_arr['week']['current_year'] = $weekcurrent_year;

    $search_arr['week']['current_month'] = $weekcurrent_month;

    $search_arr['week']['current_week'] = $weekcurrent_week;

    //月

    if(!$search_arr['searchmonth_year']){

      $search_arr['searchmonth_year'] = date('Y', time());

    }

    if(!$search_arr['searchmonth_month']){

      $search_arr['searchmonth_month'] = date('m', time());

    }

    $monthcurrent_year = $search_arr['searchmonth_year'];

    $monthcurrent_month = $search_arr['searchmonth_month'];

    $search_arr['month']['current_year'] = $monthcurrent_year;

    $search_arr['month']['current_month'] = $monthcurrent_month;

    return $search_arr;

  }

以上就是本文的全部内容,希望对大家的学习有所帮助。

推荐信息
Baidu
map