]> source.dussan.org Git - jquery-ui.git/commitdiff
Datepicker: changed setDate not to modify the passed date argument. Fixes #6671 ...
authorpheiberg <peter@heiberg.se>
Sun, 21 Nov 2010 21:06:23 +0000 (22:06 +0100)
committerScott González <scott.gonzalez@gmail.com>
Mon, 22 Nov 2010 13:29:29 +0000 (08:29 -0500)
tests/unit/datepicker/datepicker_options.js
ui/jquery.ui.datepicker.js

index 5b5f252cc9a576c61a252ddf945fd722c6fff0a0..af561a78389b4aa40b7103429032e2837e1e1a75 100644 (file)
@@ -470,6 +470,10 @@ test('setDate', function() {
        equalsDate(inp.datepicker('getDate'), minDate, 'Set date min/max - setDate < min');
        inp.datepicker('setDate', date2);
        equalsDate(inp.datepicker('getDate'), maxDate, 'Set date min/max - setDate > max');
+       var dateAndTimeToSet = new Date(2008, 3 - 1, 28, 1, 11, 0);
+       var dateAndTimeClone = new Date(2008, 3 - 1, 28, 1, 11, 0);
+       inp.datepicker('setDate', dateAndTimeToSet);
+       equals(dateAndTimeToSet.getTime(), dateAndTimeClone.getTime(), 'Date object passed should not be changed by setDate');
 });
 
 test('altField', function() {
index 961e1780dfb03a02628fa0937a1557d610c64078..739db1007e5cf3910ecfc3b747a4e9f6740ec12b 100644 (file)
@@ -1315,16 +1315,16 @@ $.extend(Datepicker.prototype, {
                        }
                        return new Date(year, month, day);
                };
-               date = (date == null ? defaultDate : (typeof date == 'string' ? offsetString(date) :
-                       (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date)));
-               date = (date && date.toString() == 'Invalid Date' ? defaultDate : date);
-               if (date) {
-                       date.setHours(0);
-                       date.setMinutes(0);
-                       date.setSeconds(0);
-                       date.setMilliseconds(0);
+               var newDate = (date == null ? defaultDate : (typeof date == 'string' ? offsetString(date) :
+                       (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+               newDate = (newDate && newDate.toString() == 'Invalid Date' ? defaultDate : newDate);
+               if (newDate) {
+                       newDate.setHours(0);
+                       newDate.setMinutes(0);
+                       newDate.setSeconds(0);
+                       newDate.setMilliseconds(0);
                }
-               return this._daylightSavingAdjust(date);
+               return this._daylightSavingAdjust(newDate);
        },
 
        /* Handle switch to/from daylight saving.
@@ -1344,10 +1344,10 @@ $.extend(Datepicker.prototype, {
                var clear = !(date);
                var origMonth = inst.selectedMonth;
                var origYear = inst.selectedYear;
-               date = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
-               inst.selectedDay = inst.currentDay = date.getDate();
-               inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth();
-               inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear();
+               var newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+               inst.selectedDay = inst.currentDay = newDate.getDate();
+               inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+               inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
                if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange)
                        this._notifyChange(inst);
                this._adjustInstDate(inst);
@@ -1625,9 +1625,9 @@ $.extend(Datepicker.prototype, {
        _restrictMinMax: function(inst, date) {
                var minDate = this._getMinMaxDate(inst, 'min');
                var maxDate = this._getMinMaxDate(inst, 'max');
-               date = (minDate && date < minDate ? minDate : date);
-               date = (maxDate && date > maxDate ? maxDate : date);
-               return date;
+               var newDate = (minDate && date < minDate ? minDate : date);
+               newDate = (maxDate && newDate > maxDate ? maxDate : newDate);
+               return newDate;
        },
 
        /* Notify change of month/year. */