spanish moment hours examples dates javascript localization locale momentjs

javascript - hours - moment to timestamp



Configuración regional y de fecha específica con Moment.js (2)

Por lo que yo entiendo, puede cambiar el formato de fecha (sin año) para idiomas específicos usando las propiedades de MomentJS https://momentjs.com/docs/#/customization/long-date-formats/

Ejemplo:

moment.updateLocale(''en'', { longDateFormat: { LLL: "MMMM Do, LT", // Oct 6th, 4:27 PM } }); moment.updateLocale(''ru'', { longDateFormat: { LLL : ''D MMMM, HH:mm'', // 6 окт., 16:27 } });

Estoy usando Moment.js en mi proyecto y fechas de formateo de la siguiente manera:

var locale = window.navigator.userLanguage || window.navigator.language; moment.locale(locale); someDate.format("L");

Funciona bien, pero a veces necesito mostrar una fecha sin año. No puedo usar algo como someDate.format("MM/DD") porque en algunos idiomas debe ser someDate.format("DD/MM") . Necesito algo que piense como L,LL,LLL pero sin año.

¿Que puedo hacer?

LTS : ''h:mm:ss A'', LT : ''h:mm A'', L : ''MM/DD/YYYY'', LL : ''MMMM D, YYYY'', LLL : ''MMMM D, YYYY LT'', LLLL : ''dddd, MMMM D, YYYY LT''


Bueno. Esto es un poco horrible, pero sabías que iba a ser.

Primero, puede acceder a la cadena de formato real para (por ejemplo) ''L'' :

var formatL = moment.localeData().longDateFormat(''L'');

A continuación, puede realizar algunas cirugías con un reemplazo de expresiones regulares sensato:

var formatYearlessL = formatL.replace(/Y/g,'''').replace(/^/W|/W$|/W/W/,'''');

(Es decir: eliminar YYYY, más el separador huérfano dejado por su eliminación)

Luego puede usar su nueva cadena de formato en una llamada de formato de momento:

someDate.format(formatYearlessL);

Esto necesariamente hace algunas suposiciones:

  • El orden del formato numérico mes + día para una configuración regional coincide con el orden para el formato año + mes + día para esa configuración regional, con el año eliminado.
  • La forma abreviada usa separadores solo entre el mes y el día (sin separadores de entrada / salida).
  • El separador para un formato de fecha numérico corto siempre es no alfanumérico.
  • El formato consiste en elementos numéricos y separadores, en lugar de un formato de oración con artículos (consulte el comentario de RGPT a continuación sobre español y portugués, que también se aplicará a los formatos largos en algunos otros idiomas).

En una revisión rápida de locale/*.js , estas suposiciones son válidas para cada archivo de localización que examiné, pero puede haber algunas configuraciones regionales que las violen. (ETA: un comentario a continuación señala que un formato de fecha corta alemán viola la segunda suposición)

Como una advertencia adicional importante, es probable que sea frágil. Es muy posible que una versión futura de moment.js cambie la ubicación de los datos actualmente en longDateFormat ...