Skip to content

Commit d69f2ec

Browse files
pheibergscottgonzalez
authored andcommitted
Datepicker: changed setDate not to modify the passed date argument. Fixes #6671 - setDate manipulates its argument
1 parent 3361e8f commit d69f2ec

File tree

2 files changed

+20
-16
lines changed

2 files changed

+20
-16
lines changed

tests/unit/datepicker/datepicker_options.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,10 @@ test('setDate', function() {
470470
equalsDate(inp.datepicker('getDate'), minDate, 'Set date min/max - setDate < min');
471471
inp.datepicker('setDate', date2);
472472
equalsDate(inp.datepicker('getDate'), maxDate, 'Set date min/max - setDate > max');
473+
var dateAndTimeToSet = new Date(2008, 3 - 1, 28, 1, 11, 0);
474+
var dateAndTimeClone = new Date(2008, 3 - 1, 28, 1, 11, 0);
475+
inp.datepicker('setDate', dateAndTimeToSet);
476+
equals(dateAndTimeToSet.getTime(), dateAndTimeClone.getTime(), 'Date object passed should not be changed by setDate');
473477
});
474478

475479
test('altField', function() {

ui/jquery.ui.datepicker.js

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1315,16 +1315,16 @@ $.extend(Datepicker.prototype, {
13151315
}
13161316
return new Date(year, month, day);
13171317
};
1318-
date = (date == null ? defaultDate : (typeof date == 'string' ? offsetString(date) :
1319-
(typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date)));
1320-
date = (date && date.toString() == 'Invalid Date' ? defaultDate : date);
1321-
if (date) {
1322-
date.setHours(0);
1323-
date.setMinutes(0);
1324-
date.setSeconds(0);
1325-
date.setMilliseconds(0);
1318+
var newDate = (date == null ? defaultDate : (typeof date == 'string' ? offsetString(date) :
1319+
(typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
1320+
newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate);
1321+
if (newDate) {
1322+
newDate.setHours(0);
1323+
newDate.setMinutes(0);
1324+
newDate.setSeconds(0);
1325+
newDate.setMilliseconds(0);
13261326
}
1327-
return this._daylightSavingAdjust(date);
1327+
return this._daylightSavingAdjust(newDate);
13281328
},
13291329

13301330
/* Handle switch to/from daylight saving.
@@ -1344,10 +1344,10 @@ $.extend(Datepicker.prototype, {
13441344
var clear = !(date);
13451345
var origMonth = inst.selectedMonth;
13461346
var origYear = inst.selectedYear;
1347-
date = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
1348-
inst.selectedDay = inst.currentDay = date.getDate();
1349-
inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth();
1350-
inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear();
1347+
var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
1348+
inst.selectedDay = inst.currentDay = newDate.getDate();
1349+
inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
1350+
inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
13511351
if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange)
13521352
this._notifyChange(inst);
13531353
this._adjustInstDate(inst);
@@ -1625,9 +1625,9 @@ $.extend(Datepicker.prototype, {
16251625
_restrictMinMax: function(inst, date) {
16261626
var minDate = this._getMinMaxDate(inst, 'min');
16271627
var maxDate = this._getMinMaxDate(inst, 'max');
1628-
date = (minDate && date < minDate ? minDate : date);
1629-
date = (maxDate && date > maxDate ? maxDate : date);
1630-
return date;
1628+
var newDate = (minDate && date < minDate ? minDate : date);
1629+
newDate = (maxDate && newDate > maxDate ? maxDate : newDate);
1630+
return newDate;
16311631
},
16321632

16331633
/* Notify change of month/year. */

0 commit comments

Comments
 (0)