This kind of thing can be done most easily with a mapping and a regex method that supports replacements from a function.
From the datepicker docs:
format
String. Default: “mm/dd/yyyy”
The date format, combination of d, dd, D, DD, m, mm, M, MM, yy, yyyy.
d, dd: Numeric date, no leading zero and leading zero, respectively. Eg, 5, 05.
D, DD: Abbreviated and full weekday names, respectively. Eg, Mon, Monday.
m, mm: Numeric month, no leading zero and leading zero, respectively. Eg, 7, 07.
M, MM: Abbreviated and full month names, respectively. Eg, Jan, January
yy, yyyy: 2- and 4-digit years, respectively. Eg, 12, 2012.
In Ruby (see strftime formats):
STRFTIME_TO_DATEPICKER = {
'-d' => 'd', # numeric date, no leading zero
'd' => 'dd', # numeric date, with leading zero
'a' => 'D', # abbreviated weekday name (e.g., Mon)
'A' => 'DD', # full weekday name (e.g., Monday)
'-m' => 'm', # numeric month, no leading zero
'm' => 'mm', # numeric month, with leading zero
'b' => 'M', # abbreviated month name (e.g., Jan)
'B' => 'MM', # full month name (e.g., January)
'y' => 'yy', # 2-digit year
'Y' => 'yyyy' # 4-digit year
}
puts '%d/%m/%Y'.gsub(/%(-?[dmyab])/i) { |match| STRFTIME_TO_DATEPICKER[$1] || match }
# => dd/mm/yyyy
puts '%d %-d %a %A %-m %m %b %B %y %Y %M %w'.gsub(/%(-?[dmyab])/i) { |match| STRFTIME_TO_DATEPICKER[$1] || match }
# => dd d D DD m mm M MM yy yyyy %M %w
In JavaScript:
var convert_ruby_strftime_to_datepicker_format = (function () {
var format_conversions = {
'-d': 'd', // numeric date, no leading zero
'd' : 'dd', // numeric date, with leading zero
'a' : 'D', // abbreviated weekday name (e.g., Mon)
'A' : 'DD', // full weekday name (e.g., Monday)
'-m': 'm', // numeric month, no leading zero
'm' : 'mm', // numeric month, with leading zero
'b' : 'M', // abbreviated month name (e.g., Jan)
'B' : 'MM', // full month name (e.g., January)
'y' : 'yy', // 2-digit year
'Y' : 'yyyy' // 4-digit year
};
function convert_strftime(match, format) {
return format_conversions[format] || match;
}
return function (strftime) {
return strftime.replace(/%(-?[dmyab])/gi, convert_strftime);
};
})();
console.log(convert_ruby_strftime_to_datepicker_format('%d/%m/%Y'));
// dd/mm/yyyy
console.log(convert_ruby_strftime_to_datepicker_format('%d %-d %a %A %-m %m %b %B %y %Y %M %w'));
// dd d D DD m mm M MM yy yyyy %M %w
Known formats are converted, and unknown formats are passed through.