Fix Issue 381(Date fields should be displayed in ISO standard formatting) and Issue 207 (Date selector Javascript control always starts out with year 1900 selected).
Patch by: Daniel Hans
Reviewed by: Pawel Solyga
--- a/app/jquery/jquery-ui.datetimepicker.js Fri Mar 27 13:16:27 2009 +0000
+++ b/app/jquery/jquery-ui.datetimepicker.js Fri Mar 27 14:19:16 2009 +0000
@@ -53,7 +53,7 @@
dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday
dayStatus: 'Set DD as first week day', // Status text for the day of the week selection
dateStatus: 'Select DD, M d', // Status text for the date selection
- dateFormat: 'mm/dd/yy', // See format options on parseDate
+ dateFormats: ['yy-mm-dd', 'mm/dd/yy'], // All date formats accepted by the input fields
timeFormat: 'hh:ii',
firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
initStatus: 'Select a date', // Initial Status text on opening
@@ -103,7 +103,8 @@
numberOfMonths: 1, // Number of months to show at a time
stepMonths: 1, // Number of months to step back/forward
rangeSelect: false, // Allows for selecting a date range on one date picker
- rangeSeparator: ' - ' // Text between two dates in a range
+ rangeSeparator: ' - ', // Text between two dates in a range
+ dateFormat: 'yy-mm-dd' // A default date format. See format options on parseDate
};
$.extend(this._defaults, this.regional['']);
this._datetimepickerDiv = $('<div id="datetimepicker_div"></div>');
@@ -303,7 +304,11 @@
/* Filter entered characters - based on date format. */
_doKeyPress: function(e) {
var inst = $.datetimepicker._getInst(this._calId);
- var chars = $.datetimepicker._possibleChars(inst._get('dateFormat')+' '+inst._get('timeFormat'));
+ var formats = ' '+ inst._get('timeFormat');
+ var dateFormats = inst._get('dateFormats');
+ for (var i = 0; i < dateFormats.length; i++)
+ formats += dateFormats[i];
+ var chars = $.datetimepicker._possibleChars(formats);
var chr = String.fromCharCode(e.charCode == undefined ? e.keyCode : e.charCode);
return e.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
},
@@ -824,12 +829,12 @@
};
// Extract a number from the string value
var getNumber = function(match) {
- lookAhead(match);
- var size = (match == 'y' ? 4 : 2);
+ matches = lookAhead(match);
+ var size = ((match == 'y' && matches) ? 4 : 2);
var num = 0;
while (size > 0 && iValue < value.length &&
value.charAt(iValue) >= '0' && value.charAt(iValue) <= '9') {
- num = num * 10 + (value.charAt(iValue++) - 0);
+ num = num * 10 + (value.charAt(iValue++) - '0');
size--;
}
if (size == (match == 'y' ? 4 : 2))
@@ -855,7 +860,7 @@
};
// Confirm that a literal character matches the string value
var checkLiteral = function() {
- if (value.charAt(iValue) != format.charAt(iFormat))
+ if (iValue < value.length && (value.charAt(iValue) != format.charAt(iFormat)))
throw 'Unexpected literal at position ' + iValue;
iValue++;
};
@@ -1062,24 +1067,31 @@
/* Parse existing date and initialise date picker. */
_setDateFromField: function(input) {
this._input = $(input);
- var dateFormat = this._get('dateFormat')+' '+this._get('timeFormat');
var dates = this._input ? this._input.val().split(this._get('rangeSeparator')) : null;
this._endDay = this._endMonth = this._endYear = null;
var date = defaultDate = this._getDefaultDate();
if (dates.length > 0) {
var settings = this._getFormatConfig();
if (dates.length > 1) {
+ var dateFormat = this._get('dateFormat') +' '+this._get('timeFormat');
date = $.datetimepicker.parseDate(dateFormat, dates[1], settings) || defaultDate;
this._endDay = date.getDate();
this._endMonth = date.getMonth();
this._endYear = date.getFullYear();
}
- try {
+ date = null;
+ var dateFormats = this._get('dateFormats');
+ for (var i = 0; i < dateFormats.length; i++) {
+ var dateFormat = dateFormats[i] +' '+this._get('timeFormat');
+ try {
date = $.datetimepicker.parseDate(dateFormat, dates[0], settings) || defaultDate;
- } catch (e) {
- $.datetimepicker.log(e);
- date = defaultDate;
+ } catch (e) {}
+ if (date != null) {
+ $.datetimepicker._defaults['dateFormat'] = dateFormats[i];
+ break;
+ }
}
+ if (date == null) date = defaultDate;
}
this._selectedDay = date.getDate();
this._drawMonth = this._selectedMonth = date.getMonth();
--- a/app/soc/content/js/datetimepicker-090304.js Fri Mar 27 13:16:27 2009 +0000
+++ b/app/soc/content/js/datetimepicker-090304.js Fri Mar 27 14:19:16 2009 +0000
@@ -2,6 +2,7 @@
$('.datetime-pick').datetimepicker();
$('.date-pick').datetimepicker({
'pickDateOnly' : true,
+ 'defaultDate' : new Date('01/01/1974'),
'timeFormat' : '',
'yearRange' : '1900:2008',
});