¿Cómo muestro indicadores de era AC/DC u otros?

Utiliza la opción era en Intl.DateTimeFormat para mostrar Anno Domini, Antes de Cristo y nombres de eras de otros sistemas de calendario

Introducción

La mayoría de las fechas con las que trabajas se encuentran dentro de la era actual del calendario gregoriano, lo que hace innecesarios los indicadores de era. Una fecha como "15 de octubre de 2024" es clara sin necesidad de añadir "DC" al final. Sin embargo, las fechas históricas de hace más de dos mil años necesitan indicadores de era para aclarar si el año es anterior o posterior al año 1.

Diferentes culturas también utilizan diferentes sistemas de calendario con sus propias eras. El calendario japonés divide el tiempo en eras imperiales con nombre como Reiwa y Heisei. El calendario budista cuenta los años desde la muerte de Buda. El calendario islámico tiene su propia era que comienza con la Hégira.

El Intl.DateTimeFormat de JavaScript proporciona una opción era que muestra estos indicadores. La opción funciona tanto con el calendario gregoriano como con otros sistemas de calendario, formateando automáticamente la era según las convenciones de la localización.

Comprender las eras en los sistemas de calendario

Una era representa un período de tiempo contado desde un evento significativo o punto de inicio. El calendario gregoriano utiliza dos eras: DC (Después de Cristo) para fechas posteriores al año 1, y AC (Antes de Cristo) para fechas anteriores al año 1.

La era se vuelve importante al mostrar fechas históricas. El año 500 podría referirse a 500 DC o 500 AC, dos fechas separadas por mil años. Añadir el indicador de era elimina esta ambigüedad.

Otros sistemas de calendario definen las eras de manera diferente. El calendario japonés cambia de era con el reinado de cada emperador. El calendario budista utiliza una sola era que comienza en el 543 AC. Cada sistema de calendario tiene sus propias convenciones para mostrar los nombres de las eras.

Mostrar indicadores de era en fechas gregorianas

La opción era acepta tres valores que controlan cómo se muestra la era. El valor long muestra el nombre completo de la era. El valor short muestra una forma abreviada. El valor narrow muestra la representación más compacta.

const date = new Date('2024-10-15');

const long = new Intl.DateTimeFormat('en-US', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'long'
});
console.log(long.format(date)); // "October 15, 2024 Anno Domini"

const short = new Intl.DateTimeFormat('en-US', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'short'
});
console.log(short.format(date)); // "October 15, 2024 AD"

const narrow = new Intl.DateTimeFormat('en-US', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'narrow'
});
console.log(narrow.format(date)); // "October 15, 2024 A"

El valor long produce "Anno Domini" para fechas DC. El valor short produce "DC". El valor narrow produce solo "D".

Para fechas modernas, el indicador de era es redundante porque las fechas en la era actual se asumen por defecto. Normalmente solo se incluye la era al mostrar fechas históricas donde la distinción es importante.

Formatear fechas AC con indicadores de era

JavaScript representa las fechas AC usando números de año negativos o pasando valores negativos al constructor Date. El año -500 representa 501 AC, el año -1 representa 2 AC, y el año 0 representa 1 AC.

const bcDate = new Date(-500, 0, 1); // January 1, 501 BC

const long = new Intl.DateTimeFormat('en-US', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'long'
});
console.log(long.format(bcDate)); // "January 1, 501 Before Christ"

const short = new Intl.DateTimeFormat('en-US', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'short'
});
console.log(short.format(bcDate)); // "January 1, 501 BC"

El valor long produce "Before Christ" para fechas AC. El valor short produce "AC". El año se muestra como un número positivo con el indicador de era mostrando si cae antes o después del año 1.

Las fechas AC requieren un manejo cuidadoso porque el objeto Date de JavaScript tiene limitaciones al trabajar con fechas muy antiguas. Las fechas históricas anteriores a la estandarización del calendario gregoriano en 1582 son aproximaciones, y las fechas anteriores al año 1 usan un sistema de calendario que no existía en ese momento.

Mostrar eras en el calendario japonés

El calendario japonés usa eras con nombre que cambian con el reinado de cada emperador. La era actual es Reiwa, que comenzó en 2019. La era anterior fue Heisei, que transcurrió de 1989 a 2019.

Especificas el calendario japonés usando la extensión Unicode -u-ca-japanese en el identificador de localización.

const date = new Date('2024-10-15');

const long = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'long'
});
console.log(long.format(date)); // "令和6年10月15日"

const short = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'short'
});
console.log(short.format(date)); // "令和6年10月15日"

const narrow = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'narrow'
});
console.log(narrow.format(date)); // "R6年10月15日"

Los valores long y short muestran ambos "令和" (Reiwa) seguido del año dentro de esa era. El año 2024 es el año 6 de la era Reiwa. El valor narrow muestra "R" como abreviatura compacta.

El año mostrado no es el año gregoriano sino el año dentro de la era imperial actual. Cada era reinicia el conteo desde 1.

Mostrar eras en el calendario budista

El calendario budista cuenta los años desde la muerte de Buda en 543 a. C. El año budista 2567 corresponde al año gregoriano 2024.

Especificas el calendario budista usando la extensión Unicode -u-ca-buddhist en el identificador de localización.

const date = new Date('2024-10-15');

const long = new Intl.DateTimeFormat('th-TH-u-ca-buddhist', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'long'
});
console.log(long.format(date)); // "15 ตุลาคม พุทธศักราช 2567"

const short = new Intl.DateTimeFormat('th-TH-u-ca-buddhist', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'short'
});
console.log(short.format(date)); // "15 ตุลาคม พ.ศ. 2567"

El valor long muestra "พุทธศักราช" (Era Budista) como el nombre completo de la era. El valor short muestra "พ.ศ." como la forma abreviada. El año 2567 representa el año del calendario budista correspondiente a 2024 en el calendario gregoriano.

El calendario budista se usa comúnmente en Tailandia, Camboya, Laos, Myanmar y Sri Lanka.

Cómo varía el formato de eras entre localizaciones

Diferentes localizaciones usan diferentes términos y abreviaturas para la misma era. Las eras del calendario gregoriano aparecen en el idioma y estilo apropiados para cada localización.

const date = new Date('2024-10-15');
const options = {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'short'
};

const en = new Intl.DateTimeFormat('en-US', options);
console.log(en.format(date)); // "October 15, 2024 AD"

const fr = new Intl.DateTimeFormat('fr-FR', options);
console.log(fr.format(date)); // "15 octobre 2024 ap. J.-C."

const de = new Intl.DateTimeFormat('de-DE', options);
console.log(de.format(date)); // "15. Oktober 2024 n. Chr."

El inglés usa "AD" (Anno Domini). El francés usa "ap. J.-C." (après Jésus-Christ, que significa "después de Jesucristo"). El alemán usa "n. Chr." (nach Christus, que significa "después de Cristo").

El posicionamiento del indicador de era también sigue las convenciones de cada localización. El inglés típicamente lo coloca después del año, mientras que otras localizaciones pueden posicionarlo de manera diferente.

const bcDate = new Date(-500, 0, 1);
const options = {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'short'
};

const en = new Intl.DateTimeFormat('en-US', options);
console.log(en.format(bcDate)); // "January 1, 501 BC"

const fr = new Intl.DateTimeFormat('fr-FR', options);
console.log(fr.format(bcDate)); // "1 janvier 501 av. J.-C."

const de = new Intl.DateTimeFormat('de-DE', options);
console.log(de.format(bcDate)); // "1. Januar 501 v. Chr."

El francés usa "av. J.-C." (avant Jésus-Christ, que significa "antes de Jesucristo") para fechas a. C. El alemán usa "v. Chr." (vor Christus, que significa "antes de Cristo").

Casos de uso comunes

Mostrar fechas históricas requiere indicadores de era para evitar confusiones.

const battleOfMarathon = new Date(-490, 8, 12); // September 12, 490 BC

const formatter = new Intl.DateTimeFormat('en-US', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'short'
});

console.log(`Battle of Marathon: ${formatter.format(battleOfMarathon)}`);
// "Battle of Marathon: September 12, 490 BC"

Mostrar fechas en contextos culturales que utilizan diferentes sistemas de calendario requiere un formato apropiado de calendario y era.

const date = new Date('2024-10-15');

const japaneseFormatter = new Intl.DateTimeFormat('ja-JP-u-ca-japanese', {
  year: 'numeric',
  month: 'long',
  day: 'numeric',
  era: 'long'
});

console.log(`Japanese date: ${japaneseFormatter.format(date)}`);
// "Japanese date: 令和6年10月15日"

La escritura académica o histórica a menudo muestra tanto a.C. como d.C. explícitamente para mantener la coherencia a través de los períodos de tiempo.

const dates = [
  new Date(-2500, 0, 1), // 2501 BC
  new Date(-500, 0, 1),  // 501 BC
  new Date(500, 0, 1),   // 500 AD
  new Date(1500, 0, 1)   // 1500 AD
];

const formatter = new Intl.DateTimeFormat('en-US', {
  year: 'numeric',
  era: 'short'
});

dates.forEach(date => {
  console.log(formatter.format(date));
});
// "2501 BC"
// "501 BC"
// "500 AD"
// "1500 AD"

Resumen

La opción era en Intl.DateTimeFormat muestra indicadores de era como d.C., a.C., o nombres de era de otros sistemas de calendario. La opción acepta tres valores: long para nombres completos de era como "Anno Domini", short para abreviaturas como "d.C.", y narrow para la forma más compacta como "d".

Las fechas a.C. requieren números de año negativos en el constructor Date de JavaScript. La salida formateada muestra el año como un número positivo con el indicador de era mostrando si cae antes o después del año 1.

Otros sistemas de calendario tienen sus propias eras. El calendario japonés utiliza eras imperiales con nombres como Reiwa. El calendario budista utiliza una sola era que comienza en el 543 a.C. Puedes especificar el sistema de calendario usando extensiones Unicode en el identificador de locale.

Diferentes locales utilizan diferentes términos para la misma era. El inglés usa "AD" y "BC", el francés usa "ap. J.-C." y "av. J.-C.", y el alemán usa "n. Chr." y "v. Chr.". El formateador aplica automáticamente los términos y la posición apropiados para cada locale.