Moment.js / Day.js لجافا سكريبت (Node.js): دليل كامل مع أمثلة

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

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

ابدأ الدورة

ما هي هذه المكتبة ولماذا نحتاجها

\n\n

Moment.js و Day.js هما مكتبتان قويتان لجافا سكريبت، مصممتان للعمل مع التواريخ والوقت. إنهما تحلان مشكلة أساسية: الكائن الأصلي Date في جافا سكريبت غير مريح للغاية للمهام اليومية. فهو لا يدعم التنسيق، أو العمليات الحسابية المعقدة مع التواريخ، أو تحليل السلاسل النصية بتنسيقات مختلفة، أو العمل مع المناطق الزمنية دون كتابة عشرات الأسطر من الكود.

\n\n

Moment.js كان لفترة طويلة المعيار الفعلي، لكنه الآن يُعتبر "قديماً" - فقد تم تجميد تطويره، ولا يُوصى به للمشاريع الجديدة بسبب حجمه الكبير (حوالي 300 كيلوبايت). وقد حل محله Day.js - مكتبة خفيفة (2 كيلوبايت فقط) وسريعة مع واجهة برمجة تطبيقات (API) متطابقة تقريباً. Day.js متوافق تماماً مع Moment.js في معظم العمليات الأساسية، مما يسمح بالترحيل بسهولة.

\n\n

توفر كلتا المكتبتين:

\n
    \n
  • تحليل التواريخ من سلاسل نصية بأي تنسيق
  • \n
  • تنسيق التواريخ إلى سلاسل نصية قابلة للقراءة
  • \n
  • التلاعب (إضافة/طرح أيام، أشهر، سنوات)
  • \n
  • مقارنة التواريخ (قبل، بعد، بين)
  • \n
  • العمل مع المناطق الزمنية (عبر الإضافات)
  • \n
  • التدويل (دعم لغات وتنسيقات إقليمية مختلفة)
  • \n
\n\n

في هذه المقالة، سنتناول Day.js كبديل حديث، لكن جميع الأمثلة ستعمل أيضاً مع Moment.js مع تغييرات طفيفة.

\n\n

التثبيت

\n\n

يتم التثبيت لـ Node.js عبر npm أو yarn. للمتصفح، يمكن استخدام CDN.

\n\n

تثبيت Day.js

\n
# عبر npm\nnpm install dayjs\n\n# عبر yarn\nyarn add dayjs
\n\n

تثبيت Moment.js

\n
npm install moment\n\n# أو\nyarn add moment
\n\n

التضمين في المشروع

\n
// Day.js\nconst dayjs = require('dayjs');\n\n// Moment.js\nconst moment = require('moment');
\n\n

بداية سريعة مع مثال كود

\n\n

بعد التثبيت، يمكنك البدء فوراً في العمل مع التواريخ. إليك مثال بسيط يوضح الإمكانيات الأساسية:

\n\n
const dayjs = require('dayjs');\n\n// التاريخ والوقت الحاليان\nconst now = dayjs();\nconsole.log('الآن:', now.format('DD.MM.YYYY HH:mm:ss'));\n\n// تحليل سلسلة نصية\nconst date = dayjs('2024-03-15');\nconsole.log('التحليل:', date.format('DD.MM.YYYY'));\n\n// التلاعب\nconst nextWeek = dayjs().add(7, 'day');\nconsole.log('بعد أسبوع:', nextWeek.format('DD.MM.YYYY'));\n\n// الفرق بين التواريخ\nconst diff = nextWeek.diff(now, 'day');\nconsole.log('الفرق بالأيام:', diff);\n\n// المقارنة\nconsole.log('هل اليوم أبكر؟', now.isBefore(nextWeek)); // true
\n\n

الطرق/الدوال الأساسية

\n\n

1. dayjs() — إنشاء كائن تاريخ

\n

ما يفعله: ينشئ كائن Day.js يمثل لحظة زمنية محددة. بدون وسائط، يُرجع التاريخ والوقت الحاليين.

\n

المعلمات:

\n
    \n
  • date (اختياري) — سلسلة نصية، رقم (timestamp)، كائن Date، أو كائن Day.js آخر
  • \n
  • format (اختياري) — سلسلة تنسيق للتحليل، إذا كان date سلسلة نصية
  • \n
\n

مثال كود عملي:

\n
// التاريخ الحالي\nconst now = dayjs();\n\n// من سلسلة نصية\nconst fromString = dayjs('2024-12-31');\n\n// من timestamp (ميلي ثانية)\nconst fromTimestamp = dayjs(1704067200000);\n\n// من كائن Date\nconst fromDate = dayjs(new Date(2024, 0, 1)); // 1 يناير 2024\n\n// مع تحديد التنسيق\nconst customFormat = dayjs('31.12.2024', 'DD.MM.YYYY');\n\nconsole.log(now.format()); // 2024-03-15T10:30:00+03:00\nconsole.log(customFormat.format('YYYY-MM-DD')); // 2024-12-31
\n\n

2. format() — تنسيق التاريخ

\n

ما يفعله: يحول كائن التاريخ إلى سلسلة نصية وفقاً لتنسيق محدد

توصيات