Saltar al contenido

¿Cómo determinar el formato de fecha de la configuración regional de los usuarios usando javascript (el formato es dd / mm o mm / dd)?

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'

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *