– ユーザが範囲指定した期間のPV、セッション、上位閲覧ページを表示したい。
– UIとしては以下のように、開始日と終了日のDatepickerがある。
### form
まず、formはgetメソッドで作成する
<form action="" method="get"> <div class="search"> <div class="form-group form-inline "> <label for="" class="">注文日</label> <input type="text" class="form-control" name="datepicker_s" placeholder=""> <label for="" class=""> ~ </label> <input type="text" class="form-control" name="datepicker_e" placeholder=""> <button type="submit" class="btn">検索</button> </div> </div> </form>
### js
– 開始日は終了日より以前、終了日は開始日より以降 をjsのon changeで制御する
– 開始日、終了日共にmaxDateは今日までとする
<script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/i18n/jquery.ui.datepicker-ja.min.js"></script> <script> $(function(){ var format = 'yy-mm-dd'; var start = $("[name=datepicker_s]").datepicker({ dateFormat: 'yy-mm-dd', maxDate: '0' }).on("change", function(){ end.datepicker("option", "minDate", getDate(this)); }); var end = $("[name=datepicker_e]").datepicker({ dateFormat: 'yy-mm-dd', maxDate: '0', }).on("change", function(){ start.datepicker("option", "maxDate", getDate(this)); }); function getDate(element){ var date; try { date = $.datepicker.parseDate(format, element.value); } catch(error){ date = null; } return date; } }); </script>
### php
– (1)開始日、終了日入力なし、(2)開始日のみ入力、(3)終了日のみ入力、(4)開始日、終了日入力あり の4パターンを書いてやれば良い
– 「終了日のみ入力」の際に、開始日をいつに設定するかは決めの問題。便宜上、下では終了日の一週間前にしている
if(isset($_GET['datepicker_s']) && $_GET['datepicker_s'] !== ""){ $start_day = $_GET['datepicker_s']; if(isset($_GET['datepicker_e']) && $_GET['datepicker_e'] !== ""){ $end_day = $_GET['datepicker_e']; } else { $end_day = date("Y-m-d"); } } else { if(isset($_GET['datepicker_e']) && $_GET['datepicker_e'] !== ""){ $start_day = date("Y-m-d",strtotime("-1 week", strtotime($_GET['datepicker_e'] . " 00:00:00"))); $end_day = $_GET['datepicker_e']; } else { $start_day = date("Y-m-d",strtotime("-1 week")); $end_day = date("Y-m-d"); } } $data = $analytics->data_ga->get( 'ga:' . $profile, $start_day, $end_day, 'ga:pageviews', ); $pv = $data -> rows[0][0];
この分岐処理は、ハマると時間がかかるんだよなー