Skip to content

Commit ca698f3

Browse files
Fix time only issue within _parseTime
1 parent 5302e3e commit ca698f3

File tree

1 file changed

+98
-94
lines changed

1 file changed

+98
-94
lines changed

jquery-ui-timepicker-addon.js

Lines changed: 98 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -233,9 +233,11 @@ $.extend(Timepicker.prototype, {
233233
// parse the time string from input value or _setTime
234234
//########################################################################
235235
_parseTime: function(timeString, withDate) {
236+
if (!this.inst)
237+
this.inst = $.datepicker._getInst(this.$input[0]);
238+
236239
if (withDate || !this._defaults.timeOnly)
237240
{
238-
if (!this.inst) this.inst = $.datepicker._getInst(this.$input[0]);
239241
var dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');
240242
try {
241243
var parseRes = parseDateTimeInternal(dp_dateFormat, this._defaults.timeFormat, timeString, $.datepicker._getFormatConfig(this.inst), this._defaults);
@@ -250,7 +252,8 @@ $.extend(Timepicker.prototype, {
250252
else
251253
{
252254
var timeObj = $.datepicker.parseTime(this._defaults.timeFormat, timeString, this._defaults);
253-
$.extend(this, parseRes.timeObj);
255+
if(!timeObj) return false;
256+
$.extend(this, timeObj);
254257
return true;
255258
}
256259
},
@@ -851,114 +854,115 @@ $.fn.extend({
851854
});
852855

853856
$.datepicker.parseDateTime = function(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings) {
854-
var parseRes = parseDateTimeInternal(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings);
855-
if (parseRes.timeObj)
856-
{
857-
var t = parseRes.timeObj;
858-
parseRes.date.setHours(t.hour, t.minute, t.second, t.millisec);
859-
}
860-
857+
var parseRes = parseDateTimeInternal(dateFormat, timeFormat, dateTimeString, dateSettings, timeSettings);
858+
if (parseRes.timeObj)
859+
{
860+
var t = parseRes.timeObj;
861+
parseRes.date.setHours(t.hour, t.minute, t.second, t.millisec);
862+
}
863+
861864
return parseRes.date;
862865
}
863866

864867
$.datepicker.parseTime = function(timeFormat, timeString, options) {
865-
866-
//########################################################################
868+
869+
//########################################################################
867870
// pattern for standard and localized AM/PM markers
868871
//########################################################################
869-
var getPatternAmpm = function(amNames, pmNames) {
870-
var markers = [];
871-
if (amNames)
872-
$.merge(markers, amNames);
873-
if (pmNames)
874-
$.merge(markers, pmNames);
875-
markers = $.map(markers, function(val) { return val.replace(/[.*+?|()\[\]{}\\]/g, '\\$&'); });
876-
return '(' + markers.join('|') + ')?';
877-
}
878-
879-
//########################################################################
872+
var getPatternAmpm = function(amNames, pmNames) {
873+
var markers = [];
874+
if (amNames)
875+
$.merge(markers, amNames);
876+
if (pmNames)
877+
$.merge(markers, pmNames);
878+
markers = $.map(markers, function(val) { return val.replace(/[.*+?|()\[\]{}\\]/g, '\\$&'); });
879+
return '(' + markers.join('|') + ')?';
880+
}
881+
882+
//########################################################################
880883
// figure out position of time elements.. cause js cant do named captures
881884
//########################################################################
882-
var getFormatPositions = function( timeFormat ) {
883-
var finds = timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|t{1,2}|z)/g),
884-
orders = { h: -1, m: -1, s: -1, l: -1, t: -1, z: -1 };
885+
var getFormatPositions = function( timeFormat ) {
886+
var finds = timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|l{1}|t{1,2}|z)/g),
887+
orders = { h: -1, m: -1, s: -1, l: -1, t: -1, z: -1 };
885888

886-
if (finds)
887-
for (var i = 0; i < finds.length; i++)
888-
if (orders[finds[i].toString().charAt(0)] == -1)
889-
orders[finds[i].toString().charAt(0)] = i + 1;
889+
if (finds)
890+
for (var i = 0; i < finds.length; i++)
891+
if (orders[finds[i].toString().charAt(0)] == -1)
892+
orders[finds[i].toString().charAt(0)] = i + 1;
890893

891-
return orders;
892-
}
894+
return orders;
895+
}
893896

894-
var o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {});
897+
var o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {});
895898

896-
var regstr = '^' + timeFormat.toString()
897-
.replace(/h{1,2}/ig, '(\\d?\\d)')
898-
.replace(/m{1,2}/ig, '(\\d?\\d)')
899-
.replace(/s{1,2}/ig, '(\\d?\\d)')
900-
.replace(/l{1}/ig, '(\\d?\\d?\\d)')
901-
.replace(/t{1,2}/ig, getPatternAmpm(o.amNames, o.pmNames))
902-
.replace(/z{1}/ig, '(z|[-+]\\d\\d:?\\d\\d)?')
903-
.replace(/\s/g, '\\s?') + o.timeSuffix + '$',
904-
order = getFormatPositions(timeFormat),
905-
ampm = '',
906-
treg;
907-
908-
treg = timeString.match(new RegExp(regstr, 'i'));
909-
910-
var resTime = {hour: 0, minute: 0, second: 0, millisec: 0};
899+
var regstr = '^' + timeFormat.toString()
900+
.replace(/h{1,2}/ig, '(\\d?\\d)')
901+
.replace(/m{1,2}/ig, '(\\d?\\d)')
902+
.replace(/s{1,2}/ig, '(\\d?\\d)')
903+
.replace(/l{1}/ig, '(\\d?\\d?\\d)')
904+
.replace(/t{1,2}/ig, getPatternAmpm(o.amNames, o.pmNames))
905+
.replace(/z{1}/ig, '(z|[-+]\\d\\d:?\\d\\d)?')
906+
.replace(/\s/g, '\\s?') + o.timeSuffix + '$',
907+
order = getFormatPositions(timeFormat),
908+
ampm = '',
909+
treg;
910+
911+
treg = timeString.match(new RegExp(regstr, 'i'));
912+
913+
var resTime = {hour: 0, minute: 0, second: 0, millisec: 0};
911914

912-
if (treg) {
913-
if (order.t !== -1) {
914-
if (treg[order.t] === undefined || treg[order.t].length === 0) {
915-
ampm = '';
916-
resTime.ampm = '';
917-
} else {
918-
ampm = $.inArray(treg[order.t], o.amNames) !== -1 ? 'AM' : 'PM';
919-
resTime.ampm = o[ampm == 'AM' ? 'amNames' : 'pmNames'][0];
920-
}
921-
}
915+
if (treg) {
916+
if (order.t !== -1) {
917+
if (treg[order.t] === undefined || treg[order.t].length === 0) {
918+
ampm = '';
919+
resTime.ampm = '';
920+
} else {
921+
ampm = $.inArray(treg[order.t], o.amNames) !== -1 ? 'AM' : 'PM';
922+
resTime.ampm = o[ampm == 'AM' ? 'amNames' : 'pmNames'][0];
923+
}
924+
}
922925

923-
if (order.h !== -1) {
924-
if (ampm == 'AM' && treg[order.h] == '12')
925-
resTime.hour = 0; // 12am = 0 hour
926-
else if (ampm == 'PM' && treg[order.h] != '12')
927-
resTime.hour = parseInt(treg[order.h],10) + 12; // 12pm = 12 hour, any other pm = hour + 12
928-
else resTime.hour = Number(treg[order.h]);
929-
}
926+
if (order.h !== -1) {
927+
if (ampm == 'AM' && treg[order.h] == '12')
928+
resTime.hour = 0; // 12am = 0 hour
929+
else if (ampm == 'PM' && treg[order.h] != '12')
930+
resTime.hour = parseInt(treg[order.h],10) + 12; // 12pm = 12 hour, any other pm = hour + 12
931+
else resTime.hour = Number(treg[order.h]);
932+
}
930933

931-
if (order.m !== -1) resTime.minute = Number(treg[order.m]);
932-
if (order.s !== -1) resTime.second = Number(treg[order.s]);
933-
if (order.l !== -1) resTime.millisec = Number(treg[order.l]);
934-
if (order.z !== -1 && treg[order.z] !== undefined) {
935-
var tz = treg[order.z].toUpperCase();
936-
switch (tz.length) {
937-
case 1: // Z
938-
tz = o.timezoneIso8601 ? 'Z' : '+0000';
939-
break;
940-
case 5: // +hhmm
941-
if (o.timezoneIso8601)
942-
tz = tz.substring(1) == '0000'
943-
? 'Z'
944-
: tz.substring(0, 3) + ':' + tz.substring(3);
945-
break;
946-
case 6: // +hh:mm
947-
if (!o.timezoneIso8601)
948-
tz = tz == 'Z' || tz.substring(1) == '00:00'
949-
? '+0000'
950-
: tz.replace(/:/, '');
951-
else if (tz.substring(1) == '00:00')
952-
tz = 'Z';
953-
break;
954-
}
955-
resTime.timezone = tz;
956-
}
934+
if (order.m !== -1) resTime.minute = Number(treg[order.m]);
935+
if (order.s !== -1) resTime.second = Number(treg[order.s]);
936+
if (order.l !== -1) resTime.millisec = Number(treg[order.l]);
937+
if (order.z !== -1 && treg[order.z] !== undefined) {
938+
var tz = treg[order.z].toUpperCase();
939+
switch (tz.length) {
940+
case 1: // Z
941+
tz = o.timezoneIso8601 ? 'Z' : '+0000';
942+
break;
943+
case 5: // +hhmm
944+
if (o.timezoneIso8601)
945+
tz = tz.substring(1) == '0000'
946+
? 'Z'
947+
: tz.substring(0, 3) + ':' + tz.substring(3);
948+
break;
949+
case 6: // +hh:mm
950+
if (!o.timezoneIso8601)
951+
tz = tz == 'Z' || tz.substring(1) == '00:00'
952+
? '+0000'
953+
: tz.replace(/:/, '');
954+
else if (tz.substring(1) == '00:00')
955+
tz = 'Z';
956+
break;
957+
}
958+
resTime.timezone = tz;
959+
}
957960

958-
return resTime;
959961

960-
}
961-
return null;
962+
return resTime;
963+
}
964+
965+
return false;
962966
},
963967

964968
//########################################################################
@@ -1402,4 +1406,4 @@ var parseDateTimeInternal = function(dateFormat, timeFormat, dateTimeString, dat
14021406
$.timepicker = new Timepicker(); // singleton instance
14031407
$.timepicker.version = "1.0.1";
14041408

1405-
})(jQuery);
1409+
})(jQuery);

0 commit comments

Comments
 (0)