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

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

Introducción

La mayoría de las fechas con las que trabajamos 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 "d.C." 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 cae antes o después del 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 nombres 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.

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

Comprendiendo 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: d.C. (después de Cristo) para fechas posteriores al año 1, y a.C. (antes de Cristo) para fechas anteriores al año 1.

La era se vuelve importante cuando se muestran fechas históricas. El año 500 podría referirse al 500 d.C. o al 500 a.C., 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 cada reinado de emperador. El calendario budista utiliza una sola era que comienza en el 543 a.C. 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 d.C. El valor short produce "AD". El valor narrow produce solo "A".

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 cuando se muestran fechas históricas donde la distinción es importante.

Formatear fechas a.C. con indicadores de era

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

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 a.C. El valor short produce "BC". 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 a.C. requieren un manejo cuidadoso porque el objeto Date de JavaScript tiene limitaciones cuando trabaja 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 utilizan un sistema de calendario que no existía en ese momento.

Mostrar eras en el calendario japonés

El calendario japonés utiliza eras con nombres que cambian con el reinado de cada emperador. La era actual es Reiwa, que comenzó en 2019. La era anterior fue Heisei, que duró desde 1989 hasta 2019.

Se especifica el calendario japonés utilizando la extensión Unicode -u-ca-japanese en el identificador de configuración regional.

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 "令和" (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 una 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 el 543 a.C. El año budista 2567 corresponde al año gregoriano 2024.

Se especifica el calendario budista utilizando la extensión Unicode -u-ca-buddhist en el identificador de configuración regional.

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 al 2024 en el calendario gregoriano.

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

Cómo varía el formato de era entre locales

Diferentes locales utilizan diferentes términos y abreviaturas para la misma era. Las eras del calendario gregoriano aparecen en el idioma y estilo apropiados para cada locale.

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").

La posición del indicador de era también sigue las convenciones del locale. El inglés típicamente lo coloca después del año, mientras que otros locales 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

La visualización de 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"

La visualización de 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 consistencia a través de 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 DC, AC, o nombres de eras de otros sistemas de calendario. La opción acepta tres valores: long para nombres completos de era como "Anno Domini", short para abreviaturas como "DC", y narrow para la forma más compacta como "D".

Las fechas AC requieren números de año negativos en el constructor Date de JavaScript. El resultado formateado 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 nombre como Reiwa. El calendario budista utiliza una sola era que comienza en el 543 AC. Se especifica el sistema de calendario utilizando extensiones Unicode en el identificador de localización.

Diferentes localizaciones 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 posicionamiento apropiados para cada localización.