نظرة عامة على مكتبات العمل مع التواريخ في JavaScript (Node.js)
العمل مع التواريخ من أكثر المهام شيوعًا وفي نفس الوقت تعقيدًا في تطوير الويب. في JavaScript، يعاني الكائن الأصلي Date من عدة عيوب: قابلية التغيير، وإمكانيات محدودة للتنسيق والتحليل، ومشاكل مع المناطق الزمنية. لحسن الحظ، يقدم نظام Node.js البيئي عدة مكتبات قوية تبسط بشكل كبير التعامل مع التواريخ. في هذه المقالة، سنستعرض أربعة من أشهرها: Moment.js، Day.js، date-fns و Luxon.
1. Moment.js — الكلاسيكية في هذا المجال
لفترة طويلة، كانت Moment.js هي المعيار الفعلي للعمل مع التواريخ. توفر واجهة برمجة تطبيقات غنية للتحليل والتحقق والمعالجة وعرض التواريخ. ومع ذلك، تعتبر المكتبة قديمة (وضع الصيانة) ولا يُنصح بها للمشاريع الجديدة بسبب حجمها الكبير (حوالي 300 كيلوبايت) ومشاكل الأداء.
التثبيت:
npm install momentأمثلة على الاستخدام:
const moment = require('moment');
// التاريخ الحاليconst now = moment();console.log(now.format('YYYY-MM-DD HH:mm:ss')); // 2025-03-15 14:30:00
// تحليل سلسلة نصيةconst date = moment('2025-12-31', 'YYYY-MM-DD');console.log(date.add(1, 'day').format('DD.MM.YYYY')); // 01.01.2026
// الفرق بين التواريخconst start = moment('2025-01-01');const end = moment('2025-03-15');console.log('عدد الأيام المنقضية:', end.diff(start, 'days')); // 732. Day.js — البديل خفيف الوزن
Day.js هي مكتبة بسيطة (فقط 2 كيلوبايت) متوافقة تمامًا مع واجهة برمجة تطبيقات Moment.js. إنها مثالية للمشاريع التي يكون فيها حجم الحزمة مهمًا. تدعم Day.js الإضافات لتوسيع الوظائف (المناطق الزمنية، الوقت النسبي، إلخ).
التثبيت:
npm install dayjsأمثلة على الاستخدام:
const dayjs = require('dayjs');const relativeTime = require('dayjs/plugin/relativeTime');const utc = require('dayjs/plugin/utc');
dayjs.extend(relativeTime);dayjs.extend(utc);
// التاريخ الحاليconsole.log(dayjs().format('DD.MM.YYYY')); // 15.03.2025
// الوقت النسبيconsole.log(dayjs('2025-03-10').fromNow()); // منذ 5 أيام
// العمل مع UTCconsole.log(dayjs.utc().format()); // 2025-03-15T11:30:00Z3. date-fns — النهج الوظيفي
date-fns هي مكتبة حديثة مبنية على مبادئ البرمجة الوظيفية. على عكس Moment.js، لا تستخدم كائنات قابلة للتغيير وتدعم هيكل الشجرة (tree-shaking)، مما يسمح باستيراد الوظائف المطلوبة فقط وتقليل حجم الحزمة.
التثبيت:
npm install date-fnsأمثلة على الاستخدام:
const { format, addDays, differenceInDays, parseISO } = require('date-fns');const { ru } = require('date-fns/locale');
// التنسيق مع اللغة المحليةconsole.log(format(new Date(), 'd MMMM yyyy', { locale: ru })); // 15 مارس 2025
// المعالجةconst future = addDays(new Date(), 10);console.log(format(future, 'yyyy-MM-dd')); // 2025-03-25
// الفرقconst d1 = parseISO('2025-01-01');const d2 = new Date();console.log('عدد الأيام منذ رأس السنة:', differenceInDays(d2, d1)); // 734. Luxon — المعيار الحديث
Luxon هي مكتبة من مبتكري Moment.js، ولكنها خالية من عيوبها. تستخدم الكائنات الأصلية DateTime و Duration و Interval، وتدعم المناطق الزمنية والتدويل "خارج الصندوق". Luxon مثالية للسيناريوهات المعقدة مع المناطق الزمنية.
التثبيت:
npm install luxon