Solución:
Puedes hacer esto sin usar el momento también
function getDateFormatString() {
const formatObj = new Intl.DateTimeFormat(locale).formatToParts(new Date());
return formatObj
.map(obj => {
switch (obj.type) {
case "day":
return "DD";
case "month":
return "MM";
case "year":
return "YYYY";
default:
return obj.value;
}
})
.join("");
}
// locale="en-US"
getDateFormatString(); // MM/DD/YYYY
// locale="en-GB"
getDateFormatString(); // DD/MM/YYYY
Usando momento localeData
se puede localizar longDateFormat
. Esto le dará un formato localizado para año, mes y día. Puede utilizar este valor para analizar la cadena de entrada en función de la configuración regional.
Aquí un ejemplo en vivo:
// Get user locale
var locale = window.navigator.userLanguage || window.navigator.language;
// Set locale to moment
moment.locale(locale);
// Get locale data
var localeData = moment.localeData();
var format = localeData.longDateFormat('L');
var m1 = moment('2/2/2016', format);
console.log(m1.format()); // February 2nd 2016
console.log(m1.format(format) + ' using format: ' + format);
var m2 = moment('5/1/2017', format);
console.log(m2.format());
console.log(m2.format(format) + ' using format: ' + format);
// January 5th 2017 for locales that use DD/MM/YYYY
// May 1st 2017 for locales that use MM/DD/YYYY
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.min.js"></script>
Este código no funcionará para las configuraciones regionales que usan un formato que comienza con el año (p. Ej. YYYY.MM.DD.
para la configuración regional húngara)
Respondiendo esto para 2019. Si realmente desea ser minucioso, puede intentar manejar navegadores heredados de baja participación de mercado, sistemas de numeración no latinos o calendarios no gregorianos.
Todo esto podría reducirse a un reemplazo de expresiones regulares, pero si va a analizar las fechas, querrá mantener los índices de campo.
function dateFormat(language) {
const sample = window.Intl ? new Intl.DateTimeFormat(language, {
numberingSystem: 'latn',
calendar: 'gregory'
}).format(new Date(1970, 11, 31)) : '';
let mm = 0,
mi = sample.indexOf(12);
let dd = 1,
di = sample.indexOf(31);
let yy = 2,
yi = sample.indexOf(1970);
// IE 10 or earlier, iOS 9 or earlier, non-Latin numbering system
// or non-Gregorian calendar; fall back to mm/dd/yyyy
if (yi >= 0 && mi >= 0 && di >= 0) {
mm = (mi > yi) + (mi > di);
dd = (di > yi) + (di > mi);
yy = (yi > mi) + (yi > di);
}
let r = [];
r[yy] = 'yyyy';
r[mm] = 'mm';
r[dd] = 'dd';
return r.join(sample.match(/[-.]/) || "https://foroayuda.es/");
}
console.log(dateFormat()); // 'mm/dd/yyyy' if in US
console.log(dateFormat('de')); // 'dd.mm.yyyy'
console.log(dateFormat('en-AU')); // 'dd/mm/yyyy'