|
2 | 2 | * jQuery timepicker addon |
3 | 3 | * By: Trent Richardson [http://trentrichardson.com] |
4 | 4 | * Version 1.1.0-dev |
5 | | - * Last Modified: 10/09/2012 |
| 5 | + * Last Modified: 10/25/2012 |
6 | 6 | * |
7 | 7 | * Copyright 2012 Trent Richardson |
8 | 8 | * You may use this project under MIT or GPL licenses. |
|
104 | 104 | addSliderAccess: false, |
105 | 105 | sliderAccessArgs: null, |
106 | 106 | controlType: 'slider', |
107 | | - defaultValue: null |
| 107 | + defaultValue: null, |
| 108 | + strict: true |
108 | 109 | }; |
109 | 110 | $.extend(this._defaults, this.regional['']); |
110 | 111 | } |
|
1023 | 1024 |
|
1024 | 1025 | var o = extendRemove(extendRemove({}, $.timepicker._defaults), options || {}); |
1025 | 1026 |
|
1026 | | - var regstr = '^' + timeFormat.toString() |
1027 | | - .replace(/([hH]{1,2}|mm?|ss?|[tT]{1,2}|[lz]|'.*?')/g, function (match) { |
1028 | | - switch (match.charAt(0).toLowerCase()) { |
1029 | | - case 'h': return '(\\d?\\d)'; |
1030 | | - case 'm': return '(\\d?\\d)'; |
1031 | | - case 's': return '(\\d?\\d)'; |
1032 | | - case 'l': return '(\\d?\\d?\\d)'; |
1033 | | - case 'z': return '(z|[-+]\\d\\d:?\\d\\d|\\S+)?'; |
1034 | | - case 't': return getPatternAmpm(o.amNames, o.pmNames); |
1035 | | - default: // literal escaped in quotes |
1036 | | - return '(' + match.replace(/\'/g, "").replace(/(\.|\$|\^|\\|\/|\(|\)|\[|\]|\?|\+|\*)/g, function (m) { return "\\" + m; }) + ')?'; |
1037 | | - } |
1038 | | - }) |
1039 | | - .replace(/\s/g, '\\s?') + |
1040 | | - o.timeSuffix + '$', |
1041 | | - order = getFormatPositions(timeFormat), |
1042 | | - ampm = '', |
1043 | | - treg; |
1044 | | - |
1045 | | - treg = timeString.match(new RegExp(regstr, 'i')); |
1046 | | - |
1047 | | - var resTime = { |
1048 | | - hour: 0, |
1049 | | - minute: 0, |
1050 | | - second: 0, |
1051 | | - millisec: 0 |
1052 | | - }; |
| 1027 | + var strictParse = function(f, s, o){ |
| 1028 | + var regstr = '^' + f.toString() |
| 1029 | + .replace(/([hH]{1,2}|mm?|ss?|[tT]{1,2}|[lz]|'.*?')/g, function (match) { |
| 1030 | + switch (match.charAt(0).toLowerCase()) { |
| 1031 | + case 'h': return '(\\d?\\d)'; |
| 1032 | + case 'm': return '(\\d?\\d)'; |
| 1033 | + case 's': return '(\\d?\\d)'; |
| 1034 | + case 'l': return '(\\d?\\d?\\d)'; |
| 1035 | + case 'z': return '(z|[-+]\\d\\d:?\\d\\d|\\S+)?'; |
| 1036 | + case 't': return getPatternAmpm(o.amNames, o.pmNames); |
| 1037 | + default: // literal escaped in quotes |
| 1038 | + return '(' + match.replace(/\'/g, "").replace(/(\.|\$|\^|\\|\/|\(|\)|\[|\]|\?|\+|\*)/g, function (m) { return "\\" + m; }) + ')?'; |
| 1039 | + } |
| 1040 | + }) |
| 1041 | + .replace(/\s/g, '\\s?') + |
| 1042 | + o.timeSuffix + '$', |
| 1043 | + order = getFormatPositions(f), |
| 1044 | + ampm = '', |
| 1045 | + treg; |
| 1046 | + |
| 1047 | + treg = s.match(new RegExp(regstr, 'i')); |
| 1048 | + |
| 1049 | + var resTime = { |
| 1050 | + hour: 0, |
| 1051 | + minute: 0, |
| 1052 | + second: 0, |
| 1053 | + millisec: 0 |
| 1054 | + }; |
1053 | 1055 |
|
1054 | | - if (treg) { |
1055 | | - if (order.t !== -1) { |
1056 | | - if (treg[order.t] === undefined || treg[order.t].length === 0) { |
1057 | | - ampm = ''; |
1058 | | - resTime.ampm = ''; |
1059 | | - } else { |
1060 | | - ampm = $.inArray(treg[order.t].toUpperCase(), o.amNames) !== -1 ? 'AM' : 'PM'; |
1061 | | - resTime.ampm = o[ampm == 'AM' ? 'amNames' : 'pmNames'][0]; |
| 1056 | + if (treg) { |
| 1057 | + if (order.t !== -1) { |
| 1058 | + if (treg[order.t] === undefined || treg[order.t].length === 0) { |
| 1059 | + ampm = ''; |
| 1060 | + resTime.ampm = ''; |
| 1061 | + } else { |
| 1062 | + ampm = $.inArray(treg[order.t].toUpperCase(), o.amNames) !== -1 ? 'AM' : 'PM'; |
| 1063 | + resTime.ampm = o[ampm == 'AM' ? 'amNames' : 'pmNames'][0]; |
| 1064 | + } |
1062 | 1065 | } |
1063 | | - } |
1064 | 1066 |
|
1065 | | - if (order.h !== -1) { |
1066 | | - if (ampm == 'AM' && treg[order.h] == '12') { |
1067 | | - resTime.hour = 0; // 12am = 0 hour |
1068 | | - } else { |
1069 | | - if (ampm == 'PM' && treg[order.h] != '12') { |
1070 | | - resTime.hour = parseInt(treg[order.h], 10) + 12; // 12pm = 12 hour, any other pm = hour + 12 |
| 1067 | + if (order.h !== -1) { |
| 1068 | + if (ampm == 'AM' && treg[order.h] == '12') { |
| 1069 | + resTime.hour = 0; // 12am = 0 hour |
1071 | 1070 | } else { |
1072 | | - resTime.hour = Number(treg[order.h]); |
| 1071 | + if (ampm == 'PM' && treg[order.h] != '12') { |
| 1072 | + resTime.hour = parseInt(treg[order.h], 10) + 12; // 12pm = 12 hour, any other pm = hour + 12 |
| 1073 | + } else { |
| 1074 | + resTime.hour = Number(treg[order.h]); |
| 1075 | + } |
1073 | 1076 | } |
1074 | 1077 | } |
1075 | | - } |
1076 | 1078 |
|
1077 | | - if (order.m !== -1) { |
1078 | | - resTime.minute = Number(treg[order.m]); |
1079 | | - } |
1080 | | - if (order.s !== -1) { |
1081 | | - resTime.second = Number(treg[order.s]); |
1082 | | - } |
1083 | | - if (order.l !== -1) { |
1084 | | - resTime.millisec = Number(treg[order.l]); |
1085 | | - } |
1086 | | - if (order.z !== -1 && treg[order.z] !== undefined) { |
1087 | | - var tz = treg[order.z].toUpperCase(); |
1088 | | - switch (tz.length) { |
1089 | | - case 1: |
1090 | | - // Z |
1091 | | - tz = o.timezoneIso8601 ? 'Z' : '+0000'; |
1092 | | - break; |
1093 | | - case 5: |
1094 | | - // +hhmm |
1095 | | - if (o.timezoneIso8601) { |
1096 | | - tz = tz.substring(1) == '0000' ? 'Z' : tz.substring(0, 3) + ':' + tz.substring(3); |
1097 | | - } |
1098 | | - break; |
1099 | | - case 6: |
1100 | | - // +hh:mm |
1101 | | - if (!o.timezoneIso8601) { |
1102 | | - tz = tz == 'Z' || tz.substring(1) == '00:00' ? '+0000' : tz.replace(/:/, ''); |
1103 | | - } else { |
1104 | | - if (tz.substring(1) == '00:00') { |
1105 | | - tz = 'Z'; |
| 1079 | + if (order.m !== -1) { |
| 1080 | + resTime.minute = Number(treg[order.m]); |
| 1081 | + } |
| 1082 | + if (order.s !== -1) { |
| 1083 | + resTime.second = Number(treg[order.s]); |
| 1084 | + } |
| 1085 | + if (order.l !== -1) { |
| 1086 | + resTime.millisec = Number(treg[order.l]); |
| 1087 | + } |
| 1088 | + if (order.z !== -1 && treg[order.z] !== undefined) { |
| 1089 | + var tz = treg[order.z].toUpperCase(); |
| 1090 | + switch (tz.length) { |
| 1091 | + case 1: |
| 1092 | + // Z |
| 1093 | + tz = o.timezoneIso8601 ? 'Z' : '+0000'; |
| 1094 | + break; |
| 1095 | + case 5: |
| 1096 | + // +hhmm |
| 1097 | + if (o.timezoneIso8601) { |
| 1098 | + tz = tz.substring(1) == '0000' ? 'Z' : tz.substring(0, 3) + ':' + tz.substring(3); |
| 1099 | + } |
| 1100 | + break; |
| 1101 | + case 6: |
| 1102 | + // +hh:mm |
| 1103 | + if (!o.timezoneIso8601) { |
| 1104 | + tz = tz == 'Z' || tz.substring(1) == '00:00' ? '+0000' : tz.replace(/:/, ''); |
| 1105 | + } else { |
| 1106 | + if (tz.substring(1) == '00:00') { |
| 1107 | + tz = 'Z'; |
| 1108 | + } |
1106 | 1109 | } |
| 1110 | + break; |
1107 | 1111 | } |
1108 | | - break; |
| 1112 | + resTime.timezone = tz; |
1109 | 1113 | } |
1110 | | - resTime.timezone = tz; |
1111 | | - } |
1112 | 1114 |
|
1113 | 1115 |
|
1114 | | - return resTime; |
1115 | | - } |
| 1116 | + return resTime; |
| 1117 | + } |
| 1118 | + return false; |
| 1119 | + };// end strictParse |
1116 | 1120 |
|
1117 | | - return false; |
| 1121 | + var looseParse = function(f,s,o){ |
| 1122 | + try{ |
| 1123 | + var d = new Date('2012-01-01 '+ s); |
| 1124 | + return { |
| 1125 | + hour: d.getHours(), |
| 1126 | + minutes: d.getMinutes(), |
| 1127 | + seconds: d.getSeconds(), |
| 1128 | + millisec: d.getMilliseconds(), |
| 1129 | + timezone: d.getTimezoneOffset() |
| 1130 | + }; |
| 1131 | + } |
| 1132 | + catch(err){ |
| 1133 | + try{ |
| 1134 | + return strictParse(f,s,o); |
| 1135 | + } |
| 1136 | + catch(err2){ |
| 1137 | + $.datepicker.log("Unable to parse \ntimeString: "+ s +"\ntimeFormat: "+ f); |
| 1138 | + } |
| 1139 | + } |
| 1140 | + return false; |
| 1141 | + }; // end looseParse |
| 1142 | + |
| 1143 | + if(o.strict !== undefined && o.strict === false){ |
| 1144 | + return looseParse(timeFormat, timeString, o); |
| 1145 | + } |
| 1146 | + return strictParse(timeFormat, timeString, o); |
1118 | 1147 | }; |
1119 | 1148 |
|
1120 | 1149 | /* |
|
0 commit comments