ما هو date-fns؟

date-fns هي مكتبة حديثة لتعامل مع التواريخ في JavaScript توفر أدوات شاملة، متسقة، وموثوقة للعمل مع التواريخ. على عكس كائن Date الأصلي في JavaScript الذي يحتوي على العديد من العيوب وعدم التناسق، تقدم date-fns نهجًا معياريًا وظيفيًا لمعالجة التواريخ. المكتبة قابلة للتقليل (tree‑shakable)، مما يعني أنك تُدرج فقط الدوال التي تستخدمها فعليًا، مما يحافظ على حجم الحزمة بأقل قدر ممكن. تدعم المكتبة أكثر من 200 دالة تغطي كل شيء من التنسيق والتحليل إلى المقارنة، والتعديل، وتوطين التواريخ.

لماذا نستخدم بيئة date-fns Playground؟

التعامل مع التواريخ في JavaScript قد يكون معقدًا—المناطق الزمنية، أنماط التنسيق، والعمليات الحسابية على التواريخ غالبًا ما تؤدي إلى نتائج غير متوقعة. توفر بيئة Playground لك إمكانية تجربة دوال date-fns في الوقت الفعلي، رؤية المخرجات فورًا، وتعلم الـ API دون الحاجة لإعداد مشروع كامل. إنها مثالية لاختبار سلاسل التنسيق، تصحيح حسابات التواريخ، أو إنشاء نماذج أولية منطقية للتواريخ بسرعة قبل دمجها في تطبيقك.

وصف الأداة

date-fns Playground هي بيئة ترميز تفاعلية تتيح لك كتابة وتنفيذ شيفرة JavaScript مع تحميل مكتبة date-fns بالكامل مسبقًا. تتوفر جميع دوال المكتبة (أكثر من 200) عبر كائن dateFns، مما يمنحك وصولًا مباشرًا إلى كل دالة. يتم تشغيل الشيفرة تلقائيًا أثناء الكتابة (مع تقليل التكرار)، وتظهر جميع مخرجات console.log، console.warn، و console.error في الطرفية المدمجة أسفل المحرر. هذا يجعلها مثالية لتعلم date-fns، اختبار عمليات التاريخ، وتجربة خيارات التنسيق المختلفة.

أمثلة

تنسيق التاريخ الحالي:

const now = new Date();
console.log(dateFns.format(now, "MMMM do, yyyy"));
// النتيجة: ديسمبر 30th, 2025

حساب عدد الأيام بين تاريخين:

const start = new Date(2025, 0, 1);
const end = new Date(2025, 11, 31);
console.log(dateFns.differenceInDays(end, start) + " أيام");
// النتيجة: 364 أيام

إضافة وقت إلى تاريخ:

const today = new Date();
const nextWeek = dateFns.addWeeks(today, 1);
const nextMonth = dateFns.addMonths(today, 1);
console.log("الأسبوع القادم:", dateFns.format(nextWeek, "yyyy-MM-dd"));
console.log("الشهر القادم:", dateFns.format(nextMonth, "yyyy-MM-dd"));

التحقق ما إذا كان التاريخ في الماضي أو المستقبل:

const date = new Date(2024, 5, 15);
console.log("هل هو في الماضي؟", dateFns.isPast(date));
console.log("هل هو في المستقبل؟", dateFns.isFuture(date));

تحليل سلسلة تاريخ:

const parsed = dateFns.parse("25/12/2025", "dd/MM/yyyy", new Date());
console.log(dateFns.format(parsed, "EEEE, MMMM do, yyyy"));
// النتيجة: الخميس، ديسمبر 25th, 2025

المميزات

  • مكتبة date-fns كاملة: وصول إلى جميع دوال date-fns (200+) عبر كائن dateFns
  • تنفيذ شيفرة مباشر: تشغيل الشيفرة تلقائيًا أثناء الكتابة مع تقليل التكرار الذكي
  • طرفية مدمجة: عرض مخرجات الـ console فورًا دون الحاجة لأدوات مطور المتصفح
  • تظليل بناء جملة: تظليل بناء جملة JavaScript لتحسين قراءة الشيفرة
  • معالجة الأخطاء: عرض أخطاء وقت التشغيل بوضوح في مخرجات الطرفية

حالات الاستخدام

  • تعلم date-fns: تجربة الدوال المختلفة ورؤية النتائج فورًا دون إعداد مشروع
  • اختبار تنسيقات التاريخ: تجربة سلاسل تنسيق مختلفة للعثور على النمط المطلوب بالضبط
  • نمذجة حسابات التاريخ: اختبار عمليات حسابية معقدة مثل إضافة أيام عمل، إيجاد الفواصل، أو مقارنة التواريخ
  • تصحيح منطق التاريخ: عزل واختبار مقاطع الشيفرة المتعلقة بالتاريخ من مشاريعك
  • تحويلات تاريخ سريعة: تحويل بين صيغ التاريخ أو حساب الفروقات الزمنية في الحال

دوال date-fns الشائعة

الدالة الوصف المثال
format تنسيق تاريخ إلى سلسلة dateFns.format(date, "yyyy-MM-dd")
parse تحليل سلسلة إلى تاريخ dateFns.parse("2025-01-01", "yyyy-MM-dd", new Date())
addDays إضافة أيام إلى تاريخ dateFns.addDays(date, 7)
subMonths طرح شهور من تاريخ dateFns.subMonths(date, 3)
differenceInDays الحصول على عدد الأيام بين تاريخين dateFns.differenceInDays(dateA, dateB)
isAfter التحقق ما إذا كان التاريخ بعد تاريخ آخر dateFns.isAfter(dateA, dateB)
isBefore التحقق ما إذا كان التاريخ قبل تاريخ آخر dateFns.isBefore(dateA, dateB)
startOfMonth الحصول على أول يوم في الشهر dateFns.startOfMonth(date)
endOfYear الحصول على آخر لحظة في السنة dateFns.endOfYear(date)
formatDistance إظهار الفرق الزمني بصيغة قابلة للقراءة البشرية dateFns.formatDistance(dateA, dateB)

مرجع رموز التنسيق

الرمز الوصف المثال
yyyy السنة بأربعة أرقام 2025
MM الشهر برقمين 01‑12
MMMM اسم الشهر الكامل January
dd اليوم برقمين 01‑31
do اليوم مع الترتيب 1st, 2nd, 3rd
EEEE اسم اليوم الكامل Monday
EEE اسم اليوم المختصر Mon
HH الساعة بنظام 24 ساعة 00‑23
hh الساعة بنظام 12 ساعة 01‑12
mm الدقائق 00‑59
ss الثواني 00‑59
a ص/م (AM/PM) AM, PM