كيف أعرض السنة والعصر في التقاويم غير الغريغورية؟
استخدم خيارات calendar وera في Intl.DateTimeFormat لعرض السنوات والعصور من التقويم الإسلامي والعبري والصيني والفارسي وأنظمة تقويم أخرى
مقدمة
يحسب التقويم الميلادي السنوات من نقطة بداية واحدة، مما يجعل عام 2024 رقمًا مباشرًا. تحسب أنظمة التقويم الأخرى السنوات بشكل مختلف. يحسب التقويم الهجري من عام 622 ميلادي. يحسب التقويم العبري من تاريخ الخلق التقليدي منذ آلاف السنين. يستخدم التقويم الصيني دورة من 60 عامًا من السنوات المسماة بدلاً من الأرقام المتسلسلة.
تعني أنظمة العد المختلفة هذه أن اللحظة نفسها في الزمن لها تمثيلات سنوية مختلفة عبر التقويمات. 15 أكتوبر 2024 في التقويم الميلادي هو عام 1446 في التقويم الهجري، وعام 5785 في التقويم العبري، وعام 2024 (甲辰، jiǎ-chén) في التقويم الصيني.
توفر واجهة Intl.DateTimeFormat في جافا سكريبت خيارات لعرض السنوات والعصور من أي نظام تقويم. يحدد خيار calendar التقويم المراد استخدامه. تتحكم خيارات year وera في كيفية عرض السنة والعصر. بالنسبة للتقويمات التي تستخدم سنوات مسماة بدلاً من الأرقام، توفر طريقة formatToParts() إمكانية الوصول إلى كل من اسم السنة والسنة الميلادية المقابلة.
كيف تختلف السنوات عبر أنظمة التقويم
تختلف أنظمة التقويم في ثلاث طرق أساسية: من أين تبدأ العد، وكيف ترقم السنوات، وما إذا كانت تستخدم العصور.
يبدأ التقويم الميلادي العد من السنة 1 ميلادية ويزداد بشكل متسلسل. يبدأ التقويم الهجري من السنة 1 هـ (بعد الهجرة) في 622 ميلادي. يبدأ التقويم العبري من السنة 1 في 3761 قبل الميلاد. لكل تقويم بدايته الخاصة، النقطة التي يبدأ فيها عد السنوات.
تستخدم بعض التقويمات أرقام سنوات متسلسلة تزداد إلى الأبد. تعمل التقويمات الميلادية والهجرية والعبرية والفارسية بهذه الطريقة. تستخدم تقويمات أخرى دورات حيث تتكرر أسماء السنوات. يستخدم التقويم الصيني دورة من 60 عامًا من السنوات المسماة. بعد 60 عامًا، تتكرر الدورة.
تقسم العصور الزمن إلى فترات مسماة. يستخدم التقويم الميلادي قبل الميلاد وبعد الميلاد. يستخدم التقويم الياباني أسماء العصور الإمبراطورية. يستخدم التقويمان الهجري والعبري عادةً عصرًا واحدًا بدأ في بدايتهما. لا يستخدم التقويم الصيني العصور بنفس الطريقة، معتمدًا بدلاً من ذلك على السنوات المسماة ضمن الدورات.
عرض السنوات في التقويم الهجري
يبدأ التقويم الهجري بعد هجرة النبي محمد من مكة إلى المدينة في عام 622 ميلادي. السنة الهجرية الأولى تتوافق مع السنة الميلادية 622. يستخدم التقويم الهجري الأشهر القمرية، مما يجعل سنواته أقصر من السنوات الميلادية. هذا يعني أن السنة الهجرية تتقدم بشكل أسرع، حيث وصلت حالياً إلى السنة 1446 هجرية عندما تكون السنة الميلادية 2024.
يمكنك تحديد التقويم الهجري باستخدام خيار calendar بقيمة islamic أو بإضافة امتداد يونيكود -u-ca-islamic إلى معرف اللغة.
const date = new Date('2024-10-15');
const formatter = new Intl.DateTimeFormat('en-US', {
calendar: 'islamic',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(formatter.format(date));
// "Rabi' II 12, 1446 AH"
تظهر السنة كـ 1446، وهي السنة الهجرية المقابلة لـ 15 أكتوبر 2024. يظهر مؤشر العصر "AH" (بعد الهجرة) تلقائياً عند عرض التواريخ الهجرية باللغة الإنجليزية.
تقوم اللغات المختلفة بتنسيق التواريخ الهجرية وفقاً لاصطلاحاتها.
const date = new Date('2024-10-15');
const en = new Intl.DateTimeFormat('en-US', {
calendar: 'islamic',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(en.format(date));
// "Rabi' II 12, 1446 AH"
const ar = new Intl.DateTimeFormat('ar-SA', {
calendar: 'islamic',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(ar.format(date));
// "١٢ ربيع الآخر ١٤٤٦ هـ"
تستخدم اللغة العربية الأرقام العربية وتعرض اسم الشهر باللغة العربية. يتغير مؤشر العصر إلى "هـ" (الاختصار العربي للهجري).
التحكم في عرض العصر في التقويم الهجري
يتحكم خيار era في ما إذا كان مؤشر العصر يظهر وكيفية ظهوره. يقبل الخيار ثلاث قيم: long للاسم الكامل للعصر، وshort للاختصار، وnarrow للشكل الأكثر اختصاراً.
const date = new Date('2024-10-15');
const long = new Intl.DateTimeFormat('en-US', {
calendar: 'islamic',
year: 'numeric',
era: 'long'
});
console.log(long.format(date));
// "1446 Anno Hegirae"
const short = new Intl.DateTimeFormat('en-US', {
calendar: 'islamic',
year: 'numeric',
era: 'short'
});
console.log(short.format(date));
// "1446 AH"
const narrow = new Intl.DateTimeFormat('en-US', {
calendar: 'islamic',
year: 'numeric',
era: 'narrow'
});
console.log(narrow.format(date));
// "1446 A"
تنتج قيمة long عبارة "Anno Hegirae" (باللاتينية تعني "في سنة الهجرة"). تنتج قيمة short عبارة "AH". تنتج قيمة narrow حرف "A" فقط.
متغيرات التقويم الإسلامي
يحتوي التقويم الإسلامي على عدة متغيرات تستخدم طرق حساب مختلفة. تدعم جافا سكريبت خمسة متغيرات: islamic، وislamic-civil، وislamic-tbla، وislamic-umalqura، وislamic-rgsa.
يستخدم متغير islamic-umalqura التقويم الرسمي للمملكة العربية السعودية، والذي يعتمد على الرصد الفلكي. بينما يستخدم متغير islamic-civil حسابًا رياضيًا ثابتًا مع تناوب الشهور بين 29 و30 يومًا.
const date = new Date('2024-10-15');
const umalqura = new Intl.DateTimeFormat('en-US', {
calendar: 'islamic-umalqura',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(umalqura.format(date));
// "Rabi' II 12, 1446 AH"
const civil = new Intl.DateTimeFormat('en-US', {
calendar: 'islamic-civil',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(civil.format(date));
// "Rabi' II 11, 1446 AH"
يمكن أن تنتج المتغيرات أرقام أيام مختلفة لنفس التاريخ الميلادي لأنها تستخدم طرق حساب مختلفة لتحديد حدود الشهر.
عرض السنوات في التقويم العبري
يحسب التقويم العبري السنوات من تاريخ الخلق التقليدي في 3761 قبل الميلاد. وهذا يجعل السنوات العبرية أكبر بكثير من السنوات الميلادية. السنة العبرية 5785 تتوافق مع السنة الميلادية 2024.
يمكنك تحديد التقويم العبري باستخدام خيار calendar بقيمة hebrew أو بإضافة امتداد يونيكود -u-ca-hebrew إلى معرف اللغة.
const date = new Date('2024-10-15');
const formatter = new Intl.DateTimeFormat('en-US', {
calendar: 'hebrew',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(formatter.format(date));
// "Tishrei 13, 5785"
تظهر السنة كـ 5785، وهي السنة العبرية المقابلة لـ 15 أكتوبر 2024. التقويم العبري هو تقويم قمري شمسي، مما يعني أن شهوره تتبع القمر ولكن سنواته تبقى متزامنة مع السنة الشمسية من خلال شهور كبيسة دورية.
تستخدم التواريخ العبرية في اللغة العبرية الأرقام وأسماء الشهور العبرية.
const date = new Date('2024-10-15');
const he = new Intl.DateTimeFormat('he-IL', {
calendar: 'hebrew',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(he.format(date));
// "י״ג בתשרי ה׳תשפ״ה"
تعرض اللغة العبرية التاريخ بالكامل باللغة العبرية، بما في ذلك الحروف العبرية المستخدمة كأرقام.
عرض السنوات في التقويم الصيني
يستخدم التقويم الصيني دورة من 60 عامًا مسماة بدلاً من أرقام السنوات المتسلسلة. كل سنة في الدورة لها اسم مكون من حرفين: جذع سماوي وفرع أرضي. سنة 2024 هي 甲辰 (jiǎ-chén)، والتي تعني "التنين الخشبي" في علم التنجيم الصيني التقليدي.
نظرًا لأن التقويم الصيني يستخدم سنوات مسماة، فإن عرضه يتطلب معالجة مختلفة عن التقويمات ذات أرقام السنوات المتسلسلة.
const date = new Date('2024-10-15');
const formatter = new Intl.DateTimeFormat('en-US', {
calendar: 'chinese',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(formatter.format(date));
// "Ninth Month 13, 2024(jiǎ-chén)"
يتضمن الإخراج المنسق كلاً من السنة الميلادية 2024 واسم السنة "jiǎ-chén" بين قوسين. يساعد هذا التمثيل المزدوج المستخدمين على فهم كل من اسم السنة الدوري والسنة الميلادية المقابلة.
تعرض التواريخ الصينية في اللغة الصينية باستخدام الأحرف الصينية.
const date = new Date('2024-10-15');
const zh = new Intl.DateTimeFormat('zh-CN', {
calendar: 'chinese',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(zh.format(date));
// "2024甲辰年九月十三"
تعرض اللغة الصينية اسم السنة باستخدام الأحرف الصينية. يدمج التنسيق اسم السنة بشكل طبيعي في سلسلة التاريخ.
استخراج اسم السنة والسنة المرتبطة
توفر التقويمات التي تستخدم سنوات مسماة قطعتين من المعلومات: اسم السنة ضمن الدورة والسنة الميلادية المقابلة. تفصل طريقة formatToParts() هذه إلى أجزاء متميزة.
const date = new Date('2024-10-15');
const formatter = new Intl.DateTimeFormat('zh-CN', {
calendar: 'chinese',
year: 'numeric',
month: 'long',
day: 'numeric'
});
const parts = formatter.formatToParts(date);
console.log(parts);
تتضمن مصفوفة الأجزاء إدخالين ذوي صلة:
[
{ type: 'relatedYear', value: '2024' },
{ type: 'yearName', value: '甲辰' },
// ... أجزاء أخرى
]
يحتوي جزء relatedYear على السنة الميلادية المكونة من أربعة أرقام. يحتوي جزء yearName على اسم السنة الدوري. يتيح هذا الفصل استخدام أي من القيمتين أو كلتيهما في التنسيق المخصص.
يمكنك استخراج هذه الأجزاء لإنشاء عروض تاريخ مخصصة.
const date = new Date('2024-10-15');
const formatter = new Intl.DateTimeFormat('zh-CN', {
calendar: 'chinese',
year: 'numeric',
month: 'long',
day: 'numeric'
});
const parts = formatter.formatToParts(date);
const yearName = parts.find(p => p.type === 'yearName')?.value;
const relatedYear = parts.find(p => p.type === 'relatedYear')?.value;
console.log(`Year name: ${yearName}`);
// "Year name: 甲辰"
console.log(`Gregorian year: ${relatedYear}`);
// "Gregorian year: 2024"
تعمل هذه التقنية مع أي تقويم يستخدم سنوات مسماة أو دورات.
عرض السنوات في التقويم الفارسي
التقويم الفارسي، المعروف أيضًا باسم التقويم الهجري الشمسي، يحسب السنوات من الهجرة في 622 ميلادية، وهي نفس بداية التقويم الإسلامي. ومع ذلك، يستخدم التقويم الفارسي الشهور الشمسية بدلاً من الشهور القمرية، مما يجعله أكثر تشابهًا مع التقويم الميلادي في هيكله.
يمكنك تحديد التقويم الفارسي باستخدام خيار calendar مع القيمة persian أو بإضافة امتداد يونيكود -u-ca-persian إلى معرّف اللغة المحلية.
const date = new Date('2024-10-15');
const formatter = new Intl.DateTimeFormat('en-US', {
calendar: 'persian',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(formatter.format(date));
// "Mehr 24, 1403 AP"
تظهر السنة كـ 1403، وهي السنة الفارسية المقابلة لـ 15 أكتوبر 2024. يظهر العصر "AP" (Anno Persico) في التنسيق الإنجليزي.
تستخدم التواريخ الفارسية في اللغة الفارسية الأرقام والأسماء الفارسية للشهور.
const date = new Date('2024-10-15');
const fa = new Intl.DateTimeFormat('fa-IR', {
calendar: 'persian',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(fa.format(date));
// "۲۴ مهر ۱۴۰۳ ه.ش."
تعرض اللغة الفارسية التاريخ باستخدام الحروف والأرقام الفارسية. مؤشر العصر "ه.ش." هو الاختصار الفارسي للعصر الهجري الشمسي.
دمج خيارات التقويم والعصر
يمكنك دمج خيارات calendar وera للتحكم بدقة في كيفية عرض السنوات والعصور عبر أنظمة التقويم المختلفة. يمنحك هذا الدمج تحكمًا دقيقًا في تنسيق التاريخ.
const date = new Date('2024-10-15');
const gregorian = new Intl.DateTimeFormat('en-US', {
calendar: 'gregory',
year: 'numeric',
month: 'long',
era: 'short'
});
console.log(gregorian.format(date));
// "October 2024 AD"
const islamic = new Intl.DateTimeFormat('en-US', {
calendar: 'islamic',
year: 'numeric',
month: 'long',
era: 'short'
});
console.log(islamic.format(date));
// "Rabi' II 1446 AH"
const hebrew = new Intl.DateTimeFormat('en-US', {
calendar: 'hebrew',
year: 'numeric',
month: 'long',
era: 'short'
});
console.log(hebrew.format(date));
// "Tishrei 5785"
تعرض التواريخ الميلادية والإسلامية مؤشرات العصر الخاصة بها لأن خيار era محدد. لا يظهر التاريخ العبري مؤشر العصر في هذا التنسيق، حيث عادة ما يتم حذفه في تنسيق التقويم العبري.
يمكنك أيضًا مزج اللغات المحلية والتقويمات لعرض التواريخ بلغة واحدة باستخدام تقويم ثقافة أخرى.
const date = new Date('2024-10-15');
const englishIslamic = new Intl.DateTimeFormat('en-US', {
calendar: 'islamic',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(englishIslamic.format(date));
// "Rabi' II 12, 1446 AH"
const arabicIslamic = new Intl.DateTimeFormat('ar-SA', {
calendar: 'islamic',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(arabicIslamic.format(date));
// "١٢ ربيع الآخر ١٤٤٦ هـ"
يستخدم كلا المنسقين التقويم الإسلامي، لكن اللغة الإنجليزية تنتج أسماء الشهور الإنجليزية والأرقام اللاتينية بينما تنتج اللغة العربية أسماء الشهور العربية والأرقام العربية.
عرض السنوات عبر تقويمات متعددة
غالبًا ما تحتاج التطبيقات التي تخدم جمهورًا دوليًا إلى عرض نفس التاريخ في أنظمة تقويم متعددة. يمكنك إنشاء منسقات متعددة لإظهار تمثيلات متوازية.
const date = new Date('2024-10-15');
const calendars = [
{ name: 'Gregorian', calendar: 'gregory' },
{ name: 'Islamic', calendar: 'islamic' },
{ name: 'Hebrew', calendar: 'hebrew' },
{ name: 'Persian', calendar: 'persian' }
];
calendars.forEach(cal => {
const formatter = new Intl.DateTimeFormat('en-US', {
calendar: cal.calendar,
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(`${cal.name}: ${formatter.format(date)}`);
});
هذا ينتج:
Gregorian: October 15, 2024
Islamic: Rabi' II 12, 1446 AH
Hebrew: Tishrei 13, 5785
Persian: Mehr 24, 1403 AP
يمثل كل تقويم نفس اللحظة الزمنية باستخدام نظام عد السنوات الخاص به ومؤشرات العصر.
حالات الاستخدام الشائعة
تحتاج التطبيقات الدولية إلى عرض التواريخ في أنظمة التقويم التي يتوقعها مستخدموها. يعرض تطبيق الخدمات المصرفية الإسلامية تواريخ المعاملات باستخدام التقويم الإسلامي.
const transactionDate = new Date('2024-10-15');
const formatter = new Intl.DateTimeFormat('ar-SA', {
calendar: 'islamic-umalqura',
year: 'numeric',
month: 'long',
day: 'numeric',
era: 'short'
});
console.log(`Transaction date: ${formatter.format(transactionDate)}`);
// "Transaction date: ١٢ ربيع الآخر ١٤٤٦ هـ"
تحدد التقويمات الدينية تواريخ الأعياد والمناسبات. يعرض تطبيق التقويم اليهودي التواريخ العبرية للأعياد.
const roshHashanah2024 = new Date('2024-10-03');
const formatter = new Intl.DateTimeFormat('he-IL', {
calendar: 'hebrew',
year: 'numeric',
month: 'long',
day: 'numeric'
});
console.log(`Rosh Hashanah: ${formatter.format(roshHashanah2024)}`);
// "Rosh Hashanah: א׳ בתשרי ה׳תשפ״ה"
تعرض التطبيقات التاريخية التواريخ في أنظمة التقويم المستخدمة في ذلك الوقت. يعرض تطبيق عن فارس القديمة التواريخ باستخدام التقويم الفارسي.
const historicalDate = new Date('2024-03-20');
const formatter = new Intl.DateTimeFormat('en-US', {
calendar: 'persian',
year: 'numeric',
month: 'long',
day: 'numeric',
era: 'long'
});
console.log(`Persian New Year: ${formatter.format(historicalDate)}`);
// "Persian New Year: Farvardin 1, 1403 Anno Persico"
الملخص
تحسب التقاويم غير الغريغورية السنوات من نقاط بداية مختلفة وتستخدم أنظمة ترقيم مختلفة. يحسب التقويم الإسلامي من سنة 622 ميلادية ويعرض حاليًا سنوات حوالي 1446. يحسب التقويم العبري من 3761 قبل الميلاد ويعرض سنوات حوالي 5785. يستخدم التقويم الصيني دورة من 60 سنة من السنوات المسماة بدلاً من الأرقام المتسلسلة.
تدعم Intl.DateTimeFormat في جافاسكريبت هذه الأنظمة التقويمية من خلال خيار calendar. تشمل القيم islamic وhebrew وchinese وpersian وغيرها. يتحكم خيار year في ما إذا كانت السنة تُعرض، ويتحكم خيار era في ما إذا كان مؤشر العصر يُعرض وكيفية عرضه.
توفر التقاويم التي تستخدم سنوات مسماة قطعتين من المعلومات من خلال formatToParts(). يحتوي جزء yearName على اسم السنة الدوري. يحتوي جزء relatedYear على السنة الغريغورية المقابلة. هذا يسمح للتطبيقات بعرض أي من القيمتين أو كلتيهما.
تقوم اللغات المختلفة بتنسيق نفس التقويم بطرق مختلفة. يُعرض التقويم الإسلامي باللغة الإنجليزية بالأرقام اللاتينية وباللغة العربية بالأرقام العربية. يتكيف التنسيق تلقائيًا مع اصطلاحات اللغة مع الحفاظ على نظام ترقيم سنوات التقويم.