Hay una marca de tiempo que se convierte a una fecha de formato DD/MM/YYYY usando el objeto Date .
¿Hay alguna forma de convertir al formato de fecha de la configuración regional del usuario?
Aquí está el código:
const getDateFromTimestamp = (timeStamp: number) => { const date = new Date(timeStamp * 1000); const day = ('0' + date.getDate()).slice(-2); const month = ('0' + (date.getMonth() + 1)).slice(-2); const year = date.getFullYear(); return day + '/' + month + '/' + year; }; Supongo que debería usar Intl , algo así como Intl.DateTimeFormat(timeStamp).format() pero no estoy seguro
¿Hay alguna forma de convertir al formato de fecha de la configuración regional del usuario?
La respuesta corta es un "sí" muy calificado, pero el uso de la configuración de idioma predeterminada significa que los resultados no son confiables, por lo que no es un enfoque recomendable.
El término "locale" es de uso general y significa ubicación. En el mundo de la especificación API de internacionalización ECMA-402 (y, por lo tanto, EMCAScript) se usa como sinónimo (muchos dirían que es un nombre inapropiado) para lenguaje.
Puede determinar el idioma predeterminado para el host y usarlo con Intl.DateTimeFormat , o su proxy toLocaleString , para formatear. Sin embargo, asume que el usuario ha configurado el idioma en una configuración adecuada y desea ver las fechas en ese formato. También significa que usted, como desarrollador, no tiene idea de en qué formato se presentará la fecha al usuario.
Otro problema es si el usuario ha configurado el idioma predeterminado del host en una configuración adecuada. Es muy probable que no lo hayan hecho, especialmente si el dispositivo no es suyo. Por lo tanto, confiar en el idioma predeterminado para formatear bien puede producir resultados inesperados y no deseados.
Tiene mucho más sentido presentar las fechas en el mismo idioma que la página en un formato inequívoco, por ejemplo, los hablantes de inglés no se confundirán con el 2 de febrero de 2022 o el 2 de febrero de 2022, independientemente de su formato preferido (donde en-GB podría ser d/m /y, en-US m/d/y y en-CA ymd). Esto también cubre el caso en el que las páginas se presentan en varios idiomas: las fechas deben presentarse en un idioma y formato apropiado para el idioma seleccionado, no en otro idioma y formato basado en una configuración de idioma predeterminada.
De esa manera, puede asegurarse de que las fechas se presenten con sensatez en el contexto de la página.
Hay 2 formas de hacer el "Formato local" en Javasript.
Date.prototype.toLocaleDateString()Este método es útil si también desea algo específico en las fechas y no hay una gran cantidad de fechas que desea formatear. El uso es bastante simple para este método:
globalThis.navigate.language ya que me devuelve el código de configuración regional que se usará al definir el formato.toLocaleDateString() y pasa el parámetro Locale para obtener el resultado deseado.options , pero si no se pasa, obtendrá la fecha formateada en Locale con solo Fecha, Mes y Año. Código de ejemplo: const getDateFromTimestamp = (timeStamp: number) => { const userLocale = globalThis.navigator.language // will give you locale, eg. 'en-US' or 'en-IN') const date = new Date(timeStamp * 1000); // your Date object return date.toLocaleDateString(userLocale); // will return the formatted date, eg: for 'en-IN', 22/2/2022 }; Para formateo avanzado, podemos usar options :
const getDateFromTimestamp = (timeStamp: number) => { const options = { weekday: 'short', year: 'numeric', month: 'long', day: 'numeric' }; const userLocale = globalThis.navigator.language // will give you locale, eg. 'en-US' or 'en-IN') const date = new Date(timeStamp * 1000); // your Date object return date.toLocaleDateString(userLocale, options); // will return the formatted date, eg: for 'en-IN', "Tue, 22 February, 2022" };DateTimeFormat().format(date) También puede usar este método, donde primero crea el objeto de DateTimeFormat.DateTimeFormat y luego lo reutiliza donde quiera formatear la fecha. Por ejemplo:
const userLocale = globalThis.navigator.language; const options = { year: 'numeric', month: 'long', day: 'numeric' }; const a = new Intl.DateTimeFormat(userLocale, options); const getDateFromTimestamp = (timeStamp) => { const date = new Date(timeStamp * 1000); // your Date object return a.format(date) };