diff --git a/demo.js b/demo.js
index 2f4d714..41ed584 100644
--- a/demo.js
+++ b/demo.js
@@ -18,7 +18,7 @@ $(function()
define a new language named "custom"
*/
- $.dateRangePickerLanguages['custom'] =
+ $.dateRangePickerLanguages['custom'] =
{
'selected': 'Choosed:',
'days': 'Days',
@@ -48,7 +48,7 @@ $(function()
'default-range' : 'Please select a date range between %d and %d days',
'default-default': 'This is costom language'
};
-
+
$('#date-range0').dateRangePicker(
{
}).on('datepicker-first-date-selected', function(event, obj)
@@ -156,7 +156,7 @@ $(function()
startOfWeek: 'sunday',
language:'en',
showShortcuts: true,
- customShortcuts:
+ customShortcuts:
[
//if return an array of two dates, it will select the date range between the two dates
{
@@ -188,8 +188,8 @@ $(function()
$('#date-range101').dateRangePicker(
{
- showShortcuts: true,
- shortcuts :
+ showShortcuts: true,
+ shortcuts :
{
'next-days': [3,5,7],
'next': ['week','month','year']
@@ -199,7 +199,7 @@ $(function()
$('#date-range102').dateRangePicker(
{
showShortcuts: true,
- shortcuts :
+ shortcuts :
{
'prev-days': [3,5,7],
'prev': ['week','month','year'],
@@ -277,17 +277,17 @@ $(function()
$('#date-range12').dateRangePicker(
{
inline:true,
- container: '#date-range12-container',
- alwaysOpen:true
+ container: '#date-range12-container',
+ alwaysOpen:true
});
$('#date-range13').dateRangePicker(
{
autoClose: true,
singleDate : true,
- showShortcuts: false
+ showShortcuts: false
});
-
+
$('#date-range13-2').dateRangePicker(
{
autoClose: true,
@@ -483,7 +483,7 @@ $(function()
});
$('#date-range51').dateRangePicker(
- {
+ {
customArrowPrevSymbol: ' ',
customArrowNextSymbol: ' '
});
@@ -500,13 +500,19 @@ $(function()
yearSelect: [1900, moment().get('year')]
});
- $('#date-range54').dateRangePicker(
+ $('#date-range54').dateRangePicker(
+ {
+ monthSelect: true,
+ yearSelect: function(current) {
+ return [current - 10, current + 10];
+ }
+ });
+
+ $('#date-range55').dateRangePicker(
{
monthSelect: true,
- yearSelect: function(current) {
- return [current - 10, current + 10];
- }
+ yearSelect: true,
+ startDate: moment().subtract(3, 'months').format('YYYY-MM-DD'),
+ endDate: moment().endOf('day').format('YYYY-MM-DD'),
});
-
-
});
diff --git a/index.html b/index.html
index de362ac..f70be76 100755
--- a/index.html
+++ b/index.html
@@ -673,8 +673,8 @@
Demonstrations
Custom arrow symbol:
Show Config
-// To make this demo work completely, the FontAwesome stylesheets are required
-{
+// To make this demo work completely, the FontAwesome stylesheets are required
+{
customArrowPrevSymbol: '<i class="fa fa-arrow-circle-left"></i>',
customArrowNextSymbol: '<i class="fa fa-arrow-circle-right"></i>'
}
@@ -712,6 +712,19 @@ Demonstrations
yearSelect: function(current) {
return [current - 10, current + 10];
}
+}
+
+
+
+
+ Month and year select min and max dates:
+ Show Config
+
+{
+ monthSelect: true,
+ yearSelect: true,
+ startDate: moment().subtract(3, 'months').format('YYYY-MM-DD'),
+ endDate: moment().endOf('day').format('YYYY-MM-DD'),
}
diff --git a/src/jquery.daterangepicker.js b/src/jquery.daterangepicker.js
index 867a558..aede1ff 100755
--- a/src/jquery.daterangepicker.js
+++ b/src/jquery.daterangepicker.js
@@ -1975,56 +1975,65 @@
}
function generateMonthElement(date, month) {
- var range;
- var startDate = opt.startDate ? moment(opt.startDate).add(!opt.singleMonth && month === 'month2' ? 1 : 0, 'month') : false;
- var endDate = opt.endDate ? moment(opt.endDate).add(!opt.singleMonth && month === 'month1' ? -1 : 0, 'month') : false;
date = moment(date);
+ var currentMonth = date.get('month');
+ var currentMonthName = nameMonth(currentMonth);
+ var nonSelectableMonth = '' + currentMonthName + '
';
- if (!opt.monthSelect ||
- startDate && endDate && startDate.isSame(endDate, 'month')) {
- return '' + nameMonth(date.get('month')) + '
';
- }
+ if (!opt.monthSelect) { return nonSelectableMonth; }
- range = [
- startDate && date.isSame(startDate, 'year') ? startDate.get('month') : 0,
- date ? date.get('month') : 11
- ];
-
- if (range[0] === range[1]) {
- return '' + nameMonth(date.get('month')) + '
';
- }
+ var startDate = opt.startDate ? moment(opt.startDate).add(!opt.singleMonth && month === 'month2' ? 1 : 0, 'month') : false;
+ var endDate = opt.endDate ? moment(opt.endDate).add(!opt.singleMonth && month === 'month1' ? -1 : 0, 'month') : false;
- return generateSelect(
- 'month',
- generateSelectData(
- range,
- date.get('month'),
- function(value) { return nameMonth(value); }
- )
- );
+ var minSelectableMonth = startDate && date.isSame(startDate, 'year') ? startDate.get('month') : 0;
+ var maxSelectableMonth = endDate && date.isSame(endDate, 'year') ? endDate.get('month') : 11;
+ var minVisibleMonth = Math.min(minSelectableMonth, currentMonth);
+ var maxVisibleMonth = Math.max(maxSelectableMonth, currentMonth);
+
+ if (minVisibleMonth === maxVisibleMonth) { return nonSelectableMonth; }
+
+ var selectData = generateSelectData(
+ {
+ minSelectable: minSelectableMonth,
+ maxSelectable: maxSelectableMonth,
+ minVisible: minVisibleMonth,
+ maxVisible: maxVisibleMonth,
+ },
+ currentMonth,
+ function (value) { return nameMonth(value); }
+ )
+ return generateSelect('month', selectData);
}
function generateYearElement(date, month) {
date = moment(date);
- var startDate = opt.startDate ? moment(opt.startDate).add(!opt.singleMonth && month === 'month2' ? 1 : 0, 'month') : false;
- var endDate = opt.endDate ? moment(opt.endDate).add(!opt.singleMonth && month === 'month1' ? -1 : 0, 'month') : false;
- var fullYear = date.get('year');
- var isYearFunction = opt.yearSelect && typeof opt.yearSelect === 'function';
- var range;
-
- if (!opt.yearSelect ||
- startDate && endDate && startDate.isSame(moment(endDate), 'year')) {
- return '' + fullYear + '
';
- }
-
- range = isYearFunction ? opt.yearSelect(fullYear) : opt.yearSelect.slice();
+ var currentYear = date.get('year');
+ var nonSelectableMonth = '' + currentYear + '
';
- range = [
- startDate ? Math.max(range[0], startDate.get('year')) : Math.min(range[0], fullYear),
- endDate ? Math.min(range[1], endDate.get('year')) : Math.max(range[1], fullYear)
- ];
+ if (!opt.yearSelect) { return nonSelectableMonth; }
- return generateSelect('year', generateSelectData(range, fullYear));
+ var isYearFunction = opt.yearSelect && typeof opt.yearSelect === 'function';
+ var startDate = opt.startDate ? moment(opt.startDate).add(!opt.singleMonth && month === 'month2' ? 1 : 0, 'month') : false;
+ var endDate = opt.endDate ? moment(opt.endDate).add(!opt.singleMonth && month === 'month1' ? -1 : 0, 'month') : false;
+ var range = isYearFunction ? opt.yearSelect(currentYear) : opt.yearSelect.slice();
+
+ var minSelectableYear = startDate ? Math.max(range[0], startDate.get('year')) : Math.min(range[0], currentYear);
+ var maxSelectableYear = endDate ? Math.min(range[1], endDate.get('year')) : Math.max(range[1], currentYear);
+ var minVisibleYear = Math.min(minSelectableYear, currentYear);
+ var maxVisibleYear = Math.max(maxSelectableYear, currentYear);
+
+ if (minVisibleYear === maxVisibleYear) { return nonSelectableMonth; }
+
+ var selectData = generateSelectData(
+ {
+ minSelectable: minSelectableYear,
+ maxSelectable: maxSelectableYear,
+ minVisible: minVisibleYear,
+ maxVisible: maxVisibleYear,
+ },
+ currentYear
+ )
+ return generateSelect('year', selectData);
}
@@ -2032,11 +2041,12 @@
var data = [];
valueBeautifier = valueBeautifier || function(value) { return value; };
- for (var i = range[0]; i <= range[1]; i++) {
+ for (var i = range.minVisible; i <= range.maxVisible; i++) {
data.push({
value: i,
text: valueBeautifier(i),
- isCurrent: i === current
+ selected: i === current,
+ disabled: ((i < range.minSelectable) || (i > range.maxSelectable)),
});
}
@@ -2048,12 +2058,14 @@
var current;
for (var i = 0, l = data.length; i < l; i++) {
- select += '';
- select += data[i].text;
- select += ' ';
-
- if (data[i].isCurrent) {
- current = data[i].text;
+ var item = data[i];
+ select += '' +
+ item.text + ' ';
+
+ if (item.selected) {
+ current = item.text;
}
}
@@ -2586,4 +2598,4 @@
}
};
-}));
\ No newline at end of file
+}));