BC/AD 또는 다른 시대 표시기를 어떻게 표시하나요?

Intl.DateTimeFormat의 era 옵션을 사용하여 서기, 기원전 및 다른 달력 시스템의 시대 이름을 표시합니다

소개

대부분의 날짜는 그레고리안 달력의 현재 시대에 속하므로 시대 표시기가 불필요합니다. "2024년 10월 15일"과 같은 날짜는 끝에 "서기"를 추가하지 않아도 명확합니다. 그러나 2천 년 이상 전의 역사적 날짜는 해당 연도가 1년 이전인지 이후인지 명확히 하기 위해 시대 표시기가 필요합니다.

또한 다양한 문화권에서는 고유한 시대를 가진 다른 달력 체계를 사용합니다. 일본 달력은 레이와(令和)나 헤이세이(平成)와 같은 명명된 황실 시대로 시간을 구분합니다. 불교 달력은 부처의 사망 이후부터 연도를 계산합니다. 이슬람 달력은 히즈라(Hijra)로 시작하는 자체 시대를 가지고 있습니다.

자바스크립트의 Intl.DateTimeFormat은 이러한 표시기를 표시하는 era 옵션을 제공합니다. 이 옵션은 그레고리안 달력과 다른 달력 체계 모두에서 작동하며, 로케일 규칙에 따라 시대를 자동으로 포맷합니다.

달력 체계의 시대 이해하기

시대는 중요한 사건이나 시작점으로부터 계산된 시간의 기간을 나타냅니다. 그레고리안 달력은 두 개의 시대를 사용합니다: 1년 이후의 날짜에는 서기(AD, Anno Domini, "주의 해에"라는 의미)를, 1년 이전의 날짜에는 기원전(BC, Before Christ)을 사용합니다.

역사적 날짜를 표시할 때 시대 표시는 중요합니다. 500년은 서기 500년 또는 기원전 500년을 의미할 수 있으며, 이는 천 년의 차이가 있습니다. 시대 표시기를 추가하면 이러한 모호성이 제거됩니다.

다른 달력 체계는 시대를 다르게 정의합니다. 일본 달력은 각 천황의 재위와 함께 시대가 변경됩니다. 불교 달력은 기원전 543년에 시작하는 단일 시대를 사용합니다. 각 달력 체계는 시대 이름을 표시하는 고유한 규칙을 가지고 있습니다.

그레고리안 날짜에서 연호 표시기 표시하기

era 옵션은 연호가 표시되는 방식을 제어하는 세 가지 값을 허용합니다. long 값은 전체 연호 이름을 표시합니다. short 값은 약어 형태를 표시합니다. narrow 값은 가장 간결한 표현을 표시합니다.

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"

long 값은 서기 날짜에 대해 "Anno Domini"를 생성합니다. short 값은 "AD"를 생성합니다. narrow 값은 "A"만 생성합니다.

현대 날짜의 경우, 현재 연호의 날짜는 기본적으로 가정되기 때문에 연호 표시기는 중복됩니다. 일반적으로 구분이 중요한 역사적 날짜를 표시할 때만 연호를 포함합니다.

연호 표시기로 BC 날짜 형식 지정하기

JavaScript는 음수 연도 숫자를 사용하거나 Date 생성자에 음수 값을 전달하여 BC 날짜를 표현합니다. 연도 -500은 기원전 501년, 연도 -1은 기원전 2년, 연도 0은 기원전 1년을 나타냅니다.

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"

long 값은 BC 날짜에 대해 "Before Christ"를 생성합니다. short 값은 "BC"를 생성합니다. 연도는 양수로 표시되며 연호 표시기는 해당 연도가 1년 이전인지 이후인지를 보여줍니다.

BC 날짜는 JavaScript Date 객체가 과거의 날짜를 다룰 때 제한이 있기 때문에 신중한 처리가 필요합니다. 1582년 그레고리안 달력 표준화 이전의 역사적 날짜는 근사치이며, 1년 이전의 날짜는 당시에 존재하지 않았던 달력 시스템을 사용합니다.

일본 달력의 연호 표시하기

일본 달력은 각 천황의 재위 기간에 따라 변경되는 연호를 사용합니다. 현재 연호는 2019년에 시작된 레이와(令和)입니다. 이전 연호는 1989년부터 2019년까지 사용된 헤이세이(平成)였습니다.

로케일 식별자에 유니코드 확장자 -u-ca-japanese를 사용하여 일본 달력을 지정합니다.

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日"

longshort 값은 모두 "令和"(레이와) 다음에 해당 연호 내의 연도를 표시합니다. 2024년은 레이와 시대의 6년차입니다. narrow 값은 간결한 약어로 "R"을 표시합니다.

표시되는 연도는 그레고리력 연도가 아니라 현재 일본 연호 내의 연도입니다. 각 연호는 1부터 다시 카운트를 시작합니다.

불교 달력의 연호 표시하기

불교 달력은 기원전 543년 부처의 입멸부터 연도를 계산합니다. 불기 2567년은 그레고리력 2024년에 해당합니다.

로케일 식별자에 유니코드 확장자 -u-ca-buddhist를 사용하여 불교 달력을 지정합니다.

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"

long 값은 전체 연호 이름으로 "พุทธศักราช"(불교 시대)를 표시합니다. short 값은 약어 형태로 "พ.ศ."를 표시합니다. 2567년은 그레고리력 2024년에 해당하는 불교 달력 연도를 나타냅니다.

불교 달력은 태국, 캄보디아, 라오스, 미얀마, 스리랑카에서 일반적으로 사용됩니다.

로케일에 따라 시대 형식이 어떻게 달라지는지

서로 다른 로케일은 동일한 시대에 대해 다른 용어와 약어를 사용합니다. 그레고리안 달력의 시대는 각 로케일에 적합한 언어와 스타일로 표시됩니다.

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

영어는 "AD"(Anno Domini)를 사용합니다. 프랑스어는 "ap. J.-C."(après Jésus-Christ, "예수 그리스도 이후"라는 의미)를 사용합니다. 독일어는 "n. Chr."(nach Christus, "그리스도 이후"라는 의미)를 사용합니다.

시대 표시자의 위치도 로케일 규칙을 따릅니다. 영어는 일반적으로 연도 뒤에 배치하지만, 다른 로케일은 다른 위치에 배치할 수 있습니다.

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

프랑스어는 BC 날짜에 대해 "av. J.-C."(avant Jésus-Christ, "예수 그리스도 이전"이라는 의미)를 사용합니다. 독일어는 "v. Chr."(vor Christus, "그리스도 이전"이라는 의미)를 사용합니다.

일반적인 사용 사례

역사적 날짜를 표시할 때는 혼동을 피하기 위해 시대 표시자가 필요합니다.

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"

다른 달력 시스템을 사용하는 문화적 맥락에서 날짜를 표시할 때는 적절한 달력과 시대 형식이 필요합니다.

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日"

학술적 또는 역사적 글쓰기에서는 시간 기간 전체에 걸쳐 일관성을 유지하기 위해 BC와 AD를 명시적으로 표시하는 경우가 많습니다.

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"

요약

Intl.DateTimeFormatera 옵션은 AD, BC 또는 다른 달력 시스템의 시대 이름과 같은 시대 표시기를 표시합니다. 이 옵션은 세 가지 값을 허용합니다: "Anno Domini"와 같은 전체 시대 이름을 위한 long, "AD"와 같은 약어를 위한 short, 그리고 "A"와 같은 가장 간결한 형태를 위한 narrow입니다.

기원전 날짜는 JavaScript Date 생성자에서 음수 연도가 필요합니다. 형식이 지정된 출력은 연도를 양수로 표시하며 시대 표시기는 해당 연도가 1년 이전인지 이후인지를 보여줍니다.

다른 달력 시스템에는 고유한 시대가 있습니다. 일본 달력은 레이와와 같은 명명된 황실 시대를 사용합니다. 불교 달력은 기원전 543년에 시작하는 단일 시대를 사용합니다. 로케일 식별자의 유니코드 확장을 사용하여 달력 시스템을 지정합니다.

다른 로케일은 동일한 시대에 대해 다른 용어를 사용합니다. 영어는 "AD"와 "BC"를 사용하고, 프랑스어는 "ap. J.-C."와 "av. J.-C."를 사용하며, 독일어는 "n. Chr."와 "v. Chr."를 사용합니다. 포맷터는 각 로케일에 적합한 용어와 위치를 자동으로 적용합니다.