– ユーザが範囲指定した期間の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];
この分岐処理は、ハマると時間がかかるんだよなー