in plugins/struts2-dojo-plugin/src/main/resources/org/apache/struts2/static/dojo/src/date/format.js [223:397]
dojo.date.parse = function (value, options) {
options = options || {};
var locale = dojo.hostenv.normalizeLocale(options.locale);
var info = dojo.date._getGregorianBundle(locale);
var formatLength = options.formatLength || "full";
if (!options.selector) {
options.selector = "dateOnly";
}
var datePattern = options.datePattern || info["dateFormat-" + formatLength];
var timePattern = options.timePattern || info["timeFormat-" + formatLength];
var pattern;
if (options.selector == "dateOnly") {
pattern = datePattern;
} else {
if (options.selector == "timeOnly") {
pattern = timePattern;
} else {
if (options.selector == "dateTime") {
pattern = datePattern + " " + timePattern;
} else {
var msg = "dojo.date.parse: Unknown selector param passed: '" + options.selector + "'.";
msg += " Defaulting to date pattern.";
dojo.debug(msg);
pattern = datePattern;
}
}
}
var groups = [];
var dateREString = _processPattern(pattern, dojo.lang.curry(this, _buildDateTimeRE, groups, info, options));
var dateRE = new RegExp("^" + dateREString + "$");
var match = dateRE.exec(value);
if (!match) {
return null;
}
var widthList = ["abbr", "wide", "narrow"];
var result = new Date(1972, 0);
var expected = {};
for (var i = 1; i < match.length; i++) {
var grp = groups[i - 1];
var l = grp.length;
var v = match[i];
switch (grp.charAt(0)) {
case "y":
if (l != 2) {
result.setFullYear(v);
expected.year = v;
} else {
if (v < 100) {
v = Number(v);
var year = "" + new Date().getFullYear();
var century = year.substring(0, 2) * 100;
var yearPart = Number(year.substring(2, 4));
var cutoff = Math.min(yearPart + 20, 99);
var num = (v < cutoff) ? century + v : century - 100 + v;
result.setFullYear(num);
expected.year = num;
} else {
if (options.strict) {
return null;
}
result.setFullYear(v);
expected.year = v;
}
}
break;
case "M":
if (l > 2) {
if (!options.strict) {
v = v.replace(/\./g, "");
v = v.toLowerCase();
}
var months = info["months-format-" + widthList[l - 3]].concat();
for (var j = 0; j < months.length; j++) {
if (!options.strict) {
months[j] = months[j].toLowerCase();
}
if (v == months[j]) {
result.setMonth(j);
expected.month = j;
break;
}
}
if (j == months.length) {
dojo.debug("dojo.date.parse: Could not parse month name: '" + v + "'.");
return null;
}
} else {
result.setMonth(v - 1);
expected.month = v - 1;
}
break;
case "E":
case "e":
if (!options.strict) {
v = v.toLowerCase();
}
var days = info["days-format-" + widthList[l - 3]].concat();
for (var j = 0; j < days.length; j++) {
if (!options.strict) {
days[j] = days[j].toLowerCase();
}
if (v == days[j]) {
break;
}
}
if (j == days.length) {
dojo.debug("dojo.date.parse: Could not parse weekday name: '" + v + "'.");
return null;
}
break;
case "d":
result.setDate(v);
expected.date = v;
break;
case "a":
var am = options.am || info.am;
var pm = options.pm || info.pm;
if (!options.strict) {
v = v.replace(/\./g, "").toLowerCase();
am = am.replace(/\./g, "").toLowerCase();
pm = pm.replace(/\./g, "").toLowerCase();
}
if (options.strict && v != am && v != pm) {
dojo.debug("dojo.date.parse: Could not parse am/pm part.");
return null;
}
var hours = result.getHours();
if (v == pm && hours < 12) {
result.setHours(hours + 12);
} else {
if (v == am && hours == 12) {
result.setHours(0);
}
}
break;
case "K":
if (v == 24) {
v = 0;
}
case "h":
case "H":
case "k":
if (v > 23) {
dojo.debug("dojo.date.parse: Illegal hours value");
return null;
}
result.setHours(v);
break;
case "m":
result.setMinutes(v);
break;
case "s":
result.setSeconds(v);
break;
case "S":
result.setMilliseconds(v);
break;
default:
dojo.unimplemented("dojo.date.parse: unsupported pattern char=" + grp.charAt(0));
}
}
if (expected.year && result.getFullYear() != expected.year) {
dojo.debug("Parsed year: '" + result.getFullYear() + "' did not match input year: '" + expected.year + "'.");
return null;
}
if (expected.month && result.getMonth() != expected.month) {
dojo.debug("Parsed month: '" + result.getMonth() + "' did not match input month: '" + expected.month + "'.");
return null;
}
if (expected.date && result.getDate() != expected.date) {
dojo.debug("Parsed day of month: '" + result.getDate() + "' did not match input day of month: '" + expected.date + "'.");
return null;
}
return result;
};