التعامل مع التواريخ في JavaScript (Node.js): المكتبات الشائعة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التعامل مع التواريخ في JavaScript (Node.js): نظرة عامة على المكتبات الشائعة



التعامل مع التواريخ والوقت هو من أكثر المهام شيوعًا في تطوير الويب. الكائن المدمج Date في JavaScript (Node.js) يوفر إمكانيات أساسية، لكنه غالبًا ما يكون غير مريح ومحدودًا: عدم وجود تنسيق مناسب، تحليل، معالجة المناطق الزمنية، والفرق بين التواريخ. لحسن الحظ، توجد عدة مكتبات ناضجة تحل هذه المشكلات. في هذه المقالة، سنستعرض أربع أدوات شائعة للتعامل مع التواريخ في Node.js.



1. Moment.js — الكلاسيكية (مع تحفظات)

Moment.js كانت لفترة طويلة المعيار الفعلي للتعامل مع التواريخ في JavaScript. توفر واجهة برمجة تطبيقات غنية للتحليل، التحقق، التنسيق، والمعالجة مع التواريخ.



التثبيت:

npm install moment


مثال على الاستخدام:

const moment = require('moment');

// التاريخ والوقت الحاليconst now = moment();console.log(now.format('YYYY-MM-DD HH:mm:ss')); // 2025-03-21 14:30:00

// تحليل سلسلة نصيةconst date = moment('2025-12-25', 'YYYY-MM-DD');console.log(date.format('dddd, MMMM Do YYYY')); // Thursday, December 25th 2025

// المعالجةconst future = moment().add(7, 'days').subtract(2, 'hours');console.log(future.fromNow()); // "in 6 days"

// الفرق بين التواريخconst a = moment('2025-01-01');const b = moment('2025-03-21');console.log(b.diff(a, 'days')); // 79


الإيجابيات: مجتمع ضخم، وثائق مفصلة، العديد من الإضافات (التعامل مع المناطق الزمنية، التوطين).

السلبيات: المكتبة قديمة (وضع الصيانة)، حجم كبير (~230 KB)، دوال متغيرة (تغير الكائن الأصلي). يوصي المطورون باستخدام البدائل الحديثة.



2. date-fns — نهج معياري ووظيفي

date-fns هي مكتبة حديثة مبنية على مبادئ البرمجة الوظيفية. كل دالة هي وحدة منفصلة، مما يسمح بتضمين الأجزاء المطلوبة فقط وتقليل حجم الحزمة.



التثبيت:

npm install date-fns


مثال على الاستخدام:

const { format, addDays, subHours, differenceInDays, parseISO } = require('date-fns');

// التنسيقconst now = new Date();console.log(format(now, 'yyyy-MM-dd HH:mm:ss')); // 2025-03-21 14:30:00

// المعالجة (غير قابلة للتغيير - يتم إنشاء كائن جديد)const future = addDays(now, 7);const adjusted = subHours(future, 2);console.log(format(adjusted, 'dd.MM.yyyy')); // 28.03.2025

// الفرقconst start = parseISO('2025-01-01');const end = new Date();console.log(differenceInDays(end, start)); // 79

// التوطين (الروسية)const { ru } = require('date-fns/locale');console.log(format(now, 'PPPP', { locale: ru })); // "пятница, 21 марта 2025 г."


الإيجابيات: المعيارية، عدم القابلية للتغيير (لا يغير الكائنات الأصلية)، دعم TypeScript، وثائق ممتازة.

السلبيات: يتطلب Node.js 14+، لا يوجد دعم مدمج للمناطق الزمنية (يتطلب date-fns-tz).



3. Day.js — بديل خفيف وسريع لـ Moment.js

Day.js هي مكتبة بسيطة (فقط 2 KB) لها واجهة برمجة تطبيقات متوافقة تقريبًا تمامًا مع Moment.js. إنها مثالية إذا كنت بحاجة لاستبدال Moment.js دون إعادة كتابة الكود.



التثبيت:

npm install dayjs


مثال على الاستخدام:

const dayjs = require('dayjs');const utc = require('dayjs/plugin/utc');const relativeTime = require('dayjs/plugin/relativeTime');

dayjs.extend(utc);dayjs.extend(relativeTime);

// الاستخدام الأساسي (كما في Moment)const now = dayjs();console.log(now

توصيات