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

Intl.DateTimeFormat의 era 옵션을 사용하여 서기, 기원전 및 다른 달력 체계의 연호 이름을 표시하세요

소개

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

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

JavaScript의 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 값은 AD 날짜에 대해 "Anno Domini"를 생성합니다. short 값은 "AD"를 생성합니다. narrow 값은 "A"만 생성합니다.

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

연호 표시와 함께 기원전 날짜 형식 지정하기

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

프랑스어는 기원전 날짜에 대해 "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."를 사용합니다. 포매터는 각 로케일에 적절한 용어와 위치를 자동으로 적용합니다.