Fechas relativas en Javascript 구성

Las fechas pueden ser algo bastante engorroso de trabajar, una de esas complicaciones nace cuando el requerimiento es el de mostrar la fecha de algún contenido de la aplicación en formato relativo a la fecha actual: Hace 2 semanas .

그렇다면 Javascript는 Intl.RelativeTimeFormat에 대한 솔루션을 제공합니다.

Al igual que los otros constructores expuesto por el objeto Intl, este constructor recibe dos argumentos, el primero un string que identifica el lenguaje que se quiere utilizar, y el segundo un set de opciones:

Te invito a leer los otros artículos sobre Internacionalización:

Formato de Fechas y Formato de números



type Options = {
    localeMatches: 'best fit' | 'lookup',
    numeric: 'always' |'auto'  // The format of the output
    style: 'long' | 'short' | 'narrow'
}


El método format de este constructor también recibe dos argumentos:
  • Un valor entero que indica el total de tiempo que se quiere mostrar
  • Un string que identifica la unidad de tiempo a utilizar. ( day , month , year 등)

  • const formatter = new Intl.RelativeTimeFormat('es-ES');
    const monthAgo = formatter.format(-1, 'month') // hace 1 mes
    const futureMonth = formatter.format(1, 'month') // en 1 mes
    


    ¿Cómo utilizar las fechas relativas?



    SI hablamos de fechas relativas es casi obvio que estarás usando fechas en alguna parte, por ejemplo: Tienes una colección de artículos que tienen una fecha de publicación, pero no quieres mostrar la fecha si no un texto indicando hace cuanto tiempo fueron creados.

    Para lograrlo deberás hacer algo de matemáticas de fechas para obtener la diferencia y usar ese valor para obtener el texto relativo.

    const publicationDate = new Date('2022/01/05')
    
    const currentDate = new Date()
    
    const msPerDay = 1000 * 60 * 60 * 24;
    
    const diffTime = Math.abs(currentDate - publicationDate);
    const diffDays = Math.ceil(diffTime / msPerDay);
    
    
    const enRtf = new Intl.RelativeTimeFormat("en-US", {
      numeric: 'auto',
    });
    
    console.log(enRtf.format(-diffDays, "day")); // 251 days ago
    console.log(enRtf.format(-diffDays/30, "month")); //8.367 months ago
    
    
    const esRtf = new Intl.RelativeTimeFormat("es-ES", {
      numeric: 'auto',
    });
    
    console.log(esRtf.format(-diffDays, "day")); // hace 251 días
    console.log(esRtf.format(-diffDays / 30, "month")); // hace 8.367 meses
    



    ✉️ Únete a Micro-bytes 🐦 Sígueme en ❤️ Apoya mi trabajo

    좋은 웹페이지 즐겨찾기