「Date Range Picker」で範囲日付を設定する方法
「Tiny Date Picker」のプロジェクトで『Date Range Picker』があります。
これで、範囲指定をDatePickerを使って設定できます。
Contents
「Date Range Picker」で範囲日付を設定する方法
サンプル
HTMLコード
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
<title>Date Range Picker Demo</title>
<link rel="stylesheet" href="/assets/tiny-date-picker-master/tiny-date-picker.css">
<link rel="stylesheet" href="/assets/tiny-date-picker-master/date-range-picker.css">
<style type="text/css">
/* Date Range の例 */
.date-range-examples {
max-width: 600px;
margin: 20px auto;
padding: 20px;
}
.ex-inputs {
position: relative;
}
.ex-inputs-header {
text-align: center;
margin-bottom: 8px;
}
.ex-inputs-start,
.ex-inputs-end {
padding: 8px;
font-size: 1em;
border: 1px solid #CCC;
border-radius: 2px;
}
.ex-inputs-start:focus,
.ex-inputs-end:focus {
border-color: #46A5F5;
}
.ex-inputs-picker {
position: absolute;
z-index: 1000;
left: 50%;
top: calc(100% + 8px);
opacity: 0;
z-index: -20;
transform: translateX(-50%);
transition: all 0.25s;
}
.ex-inputs-picker-visible {
opacity: 1;
z-index: 1000;
}
@media (max-width: 616px), (max-height: 480px) {
.ex-inputs-start,
.ex-inputs-end {
width: 100%;
}
}
</style>
</head>
<body>
<script src="/assets/tiny-date-picker-master/dist/date-range-picker.min.js"></script>
<div class="date-range-examples">
<div class="ex-inputs">
<header class="ex-inputs-header">
<h1>
Date Range Picker デモ
</h1>
<input class="ex-inputs-start" placeholder="開始日付" />
-
<input class="ex-inputs-end" placeholder="終了日付" />
</header>
<div class="ex-inputs-picker"></div>
<script>
(function () {
const root = document.querySelector('.ex-inputs');
const txtStart = root.querySelector('.ex-inputs-start');
const txtEnd = root.querySelector('.ex-inputs-end');
const container = root.querySelector('.ex-inputs-picker');
// DateRangePicker 初期化
var datePicker = DateRangePicker.DateRangePicker(container,
{
// 開始日のオプション
startOpts: {
lang: {
days: ['日', '月', '火', '水', '木', '金', '土'],
months: [
'1月',
'2月',
'3月',
'4月',
'5月',
'6月',
'7月',
'8月',
'9月',
'10月',
'11月',
'12月',
],
today: '今日',
clear: 'クリア',
close: '閉じる',
},
dayOffset: 1
},
endOpts: {
dayOffset: 1
} // 終了日のオプション
});
datePicker.on('statechange', function (_, rp) {
// テキストボックスの状態変更時呼び出される処理(日付設定処理)
var range = rp.state;
txtStart.value = range.start ? convertDateToString(range.start) : '';
txtEnd.value = range.end ? convertDateToString(range.end) : '';
});
function convertDateToString(date) {
return date.getFullYear() + '/' + String(date.getMonth()+1).padStart(2,'0') + '/' + String(date.getDate()).padStart(2,'0');
}
// テキストボックスにフォーカスがあたったとき、DatePickerを表示
txtStart.addEventListener('focus', showPicker);
txtEnd.addEventListener('focus', showPicker);
// DatePicker表示
function showPicker() {
container.classList.add('ex-inputs-picker-visible');
}
// フォーカスが外れた時にはDatePickerを非表示にする
let previousTimeout;
root.addEventListener('focusout', function hidePicker() {
clearTimeout(previousTimeout);
previousTimeout = setTimeout(function() {
if (!root.contains(document.activeElement)) {
container.classList.remove('ex-inputs-picker-visible');
}
}, 10);
});
}());
</script>
</div>
</div>
</body>
</html>
デモ
インストール方法
インストール方法については「Tiny Date Picker」をインストールすると関連ソースが付いてきます。
導入方法
CSSファイルインクルード
<link rel="stylesheet" href="/assets/tiny-date-picker-master/tiny-date-picker.css">
<link rel="stylesheet" href="/assets/tiny-date-picker-master/date-range-picker.css">
最初に「tiny-date-picker.css」(または「tiny-date-picker.min.css」)と「date-range-picker.css」(または「date-range-picker.min.css」)の両ファイルをインクルードしてください。
JSファイルインクルード
<script src="/assets/tiny-date-picker-master/dist/date-range-picker.min.js"></script>
次にダウンロードした書庫ファイルの下にある「dist」直下のJSファイルをインクルードしてください。
DateRangePicker初期化
DateRangePicker.DateRangePicker('.cls', {
startOpts: {}, // 開始DatePickerのオプション
endOpts: {}, // 終了DatePickerのオプション
});
最後に「DateRangePicker」を初期化すると完了です。
第1引数 | DateRangePickerの表示領域のオブジェクト(セレクタ) |
第2引数 | 開始DatePickerのオプション |
第3引数 | 終了DatePickerのオプション |
オプションについては「Tiny Date Picker」のオプションになります。
その他
スタイルシート
そのほかサンプルでは、カレンダーコントロール(DatePicker)が初期表示時に見えないようにクラスを定義してあります。
<style type="text/css">
/* Date Range の例 */
.date-range-examples {
max-width: 600px;
margin: 20px auto;
padding: 20px;
}
.ex-inputs {
position: relative;
}
.ex-inputs-header {
text-align: center;
margin-bottom: 8px;
}
.ex-inputs-start,
.ex-inputs-end {
padding: 8px;
font-size: 1em;
border: 1px solid #CCC;
border-radius: 2px;
}
.ex-inputs-start:focus,
.ex-inputs-end:focus {
border-color: #46A5F5;
}
.ex-inputs-picker {
position: absolute;
z-index: 1000;
left: 50%;
top: calc(100% + 8px);
opacity: 0;
z-index: -20;
transform: translateX(-50%);
transition: all 0.25s;
}
.ex-inputs-picker-visible {
opacity: 1;
z-index: 1000;
}
@media (max-width: 616px), (max-height: 480px) {
.ex-inputs-start,
.ex-inputs-end {
width: 100%;
}
}
</style>
Javascriptコード
また、サンプルではテキストボックスにフォーカスが当たった時の処理、外れた時の処理、また、日付が選択されたときの処理が独自に入れてあります。
<script>
(function () {
const root = document.querySelector('.ex-inputs');
const txtStart = root.querySelector('.ex-inputs-start');
const txtEnd = root.querySelector('.ex-inputs-end');
const container = root.querySelector('.ex-inputs-picker');
// Inject DateRangePicker into our container
var datePicker = DateRangePicker.DateRangePicker(container,
{
// 開始日のオプション
startOpts: {
lang: {
days: ['日', '月', '火', '水', '木', '金', '土'],
months: [
'1月',
'2月',
'3月',
'4月',
'5月',
'6月',
'7月',
'8月',
'9月',
'10月',
'11月',
'12月',
],
today: '今日',
clear: 'クリア',
close: '閉じる',
},
dayOffset: 1
},
endOpts: {
dayOffset: 1
} // 終了日のオプション
});
datePicker.on('statechange', function (_, rp) {
// テキストボックスの状態変更時呼び出される処理(日付設定処理)
var range = rp.state;
txtStart.value = range.start ? convertDateToString(range.start) : '';
txtEnd.value = range.end ? convertDateToString(range.end) : '';
});
function convertDateToString(date) {
return date.getFullYear() + '/' + String(date.getMonth()+1).padStart(2,'0') + '/' + String(date.getDate()).padStart(2,'0');
}
// テキストボックスにフォーカスがあたったとき、DatePickerを表示
txtStart.addEventListener('focus', showPicker);
txtEnd.addEventListener('focus', showPicker);
// DatePicker表示
function showPicker() {
container.classList.add('ex-inputs-picker-visible');
}
// フォーカスが外れた時にはDatePickerを非表示にする
let previousTimeout;
root.addEventListener('focusout', function hidePicker() {
clearTimeout(previousTimeout);
previousTimeout = setTimeout(function() {
if (!root.contains(document.activeElement)) {
container.classList.remove('ex-inputs-picker-visible');
}
}, 10);
});
}());
</script>
以上、ご参考前で。
関連記事
- 「tiny-date-picker」で、Datepicker(カレンダー選択)を実装する方法
- jQueryプラグイン「DateTimePicker」で、日付/時刻選択をを実装する方法
- jQueryプラグイン「Calendar.js」を使って、日付選択(DatePicker)を実装する方法
- jQuery UIでDatepicker(カレンダー選択)を実装する方法
- jQuery UIのDatepicker(カレンダー)を日本語化する方法