كيف أعرض مؤشرات الحقبة مثل ق.م/م أو غيرها؟

استخدم خيار era في Intl.DateTimeFormat لعرض Anno Domini وBefore Christ وأسماء الحقب من أنظمة التقويم الأخرى

مقدمة

معظم التواريخ التي تتعامل معها تقع ضمن الحقبة الحالية من التقويم الميلادي، مما يجعل مؤشرات الحقبة غير ضرورية. تاريخ مثل "15 أكتوبر 2024" واضح دون إضافة "م" في النهاية. ومع ذلك، تحتاج التواريخ التاريخية من أكثر من ألفي عام مضت إلى مؤشرات الحقبة لتوضيح ما إذا كانت السنة تقع قبل أو بعد السنة 1.

تستخدم الثقافات المختلفة أيضاً أنظمة تقويم مختلفة مع حقبها الخاصة. يقسم التقويم الياباني الوقت إلى حقب إمبراطورية مسماة مثل Reiwa وHeisei. يحسب التقويم البوذي السنوات من وفاة بوذا. التقويم الإسلامي له حقبته الخاصة التي تبدأ بالهجرة.

يوفر Intl.DateTimeFormat في JavaScript خيار era الذي يعرض هذه المؤشرات. يعمل الخيار مع كل من التقويم الميلادي وأنظمة التقويم الأخرى، ويقوم تلقائياً بتنسيق الحقبة وفقاً لاتفاقيات اللغة المحلية.

فهم الحقب في أنظمة التقويم

تمثل الحقبة فترة زمنية تُحسب من حدث مهم أو نقطة بداية. يستخدم التقويم الميلادي حقبتين: م (Anno Domini، وتعني "في سنة ربنا") للتواريخ بعد السنة 1، وق.م (قبل الميلاد) للتواريخ قبل السنة 1.

تصبح الحقبة مهمة عند عرض التواريخ التاريخية. يمكن أن تشير السنة 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" فقط.

بالنسبة للتواريخ الحديثة، يعتبر مؤشر الحقبة زائداً عن الحاجة لأن التواريخ في الحقبة الحالية مفترضة افتراضياً. عادةً ما تقوم بتضمين الحقبة فقط عند عرض التواريخ التاريخية حيث يكون التمييز مهماً.

تنسيق تواريخ ما قبل الميلاد مع مؤشرات الحقبة

تمثل JavaScript تواريخ ما قبل الميلاد باستخدام أرقام سنوات سالبة أو بتمرير قيم سالبة إلى منشئ Date. يمثل العام -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 "Before Christ" لتواريخ ما قبل الميلاد. تنتج القيمة short "BC". يتم عرض السنة كرقم موجب مع مؤشر الحقبة الذي يوضح ما إذا كانت تقع قبل أو بعد العام 1.

تتطلب تواريخ ما قبل الميلاد معالجة دقيقة لأن كائن Date في JavaScript له قيود عند العمل مع تواريخ بعيدة في الماضي. التواريخ التاريخية قبل توحيد التقويم الميلادي في عام 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日"

تعرض قيمتا long وshort كلتاهما "令和" (ريوا) متبوعة بالسنة ضمن تلك الحقبة. السنة 2024 هي السنة السادسة من حقبة ريوا. تعرض قيمة 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日"

غالبًا ما تعرض الكتابة الأكاديمية أو التاريخية كلاً من قبل الميلاد وبعد الميلاد بشكل صريح للحفاظ على الاتساق عبر الفترات الزمنية.

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"

الملخص

يعرض الخيار era في Intl.DateTimeFormat مؤشرات الحقبة مثل AD وBC أو أسماء الحقب من أنظمة التقويم الأخرى. يقبل الخيار ثلاث قيم: long لأسماء الحقب الكاملة مثل "Anno Domini"، وshort للاختصارات مثل "AD"، وnarrow للشكل الأكثر اختصارًا مثل "A".

تتطلب تواريخ قبل الميلاد أرقام سنوات سالبة في مُنشئ Date في JavaScript. يعرض الناتج المنسق السنة كرقم موجب مع مؤشر الحقبة الذي يوضح ما إذا كانت تقع قبل أو بعد السنة 1.

تحتوي أنظمة التقويم الأخرى على حقبها الخاصة. يستخدم التقويم الياباني حقب إمبراطورية مسماة مثل Reiwa. يستخدم التقويم البوذي حقبة واحدة تبدأ في عام 543 قبل الميلاد. يمكنك تحديد نظام التقويم باستخدام امتدادات Unicode في معرف اللغة المحلية.

تستخدم اللغات المختلفة مصطلحات مختلفة لنفس الحقبة الزمنية. تستخدم الإنجليزية "AD" و"BC"، وتستخدم الفرنسية "ap. J.-C." و"av. J.-C."، وتستخدم الألمانية "n. Chr." و"v. Chr.". يطبق المنسق تلقائيًا المصطلحات والموضع المناسب لكل لغة.