ما هي هذه المكتبة ولماذا نحتاجها
\n\nMoment.js و Day.js هما مكتبتان قويتان لجافا سكريبت، مصممتان للعمل مع التواريخ والوقت. إنهما تحلان مشكلة أساسية: الكائن الأصلي Date في جافا سكريبت غير مريح للغاية للمهام اليومية. فهو لا يدعم التنسيق، أو العمليات الحسابية المعقدة مع التواريخ، أو تحليل السلاسل النصية بتنسيقات مختلفة، أو العمل مع المناطق الزمنية دون كتابة عشرات الأسطر من الكود.
Moment.js كان لفترة طويلة المعيار الفعلي، لكنه الآن يُعتبر "قديماً" - فقد تم تجميد تطويره، ولا يُوصى به للمشاريع الجديدة بسبب حجمه الكبير (حوالي 300 كيلوبايت). وقد حل محله Day.js - مكتبة خفيفة (2 كيلوبايت فقط) وسريعة مع واجهة برمجة تطبيقات (API) متطابقة تقريباً. Day.js متوافق تماماً مع Moment.js في معظم العمليات الأساسية، مما يسمح بالترحيل بسهولة.
\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
\nnpm 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\nconst 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\n1. dayjs() — إنشاء كائن تاريخ
\nما يفعله: ينشئ كائن Day.js يمثل لحظة زمنية محددة. بدون وسائط، يُرجع التاريخ والوقت الحاليين.
\nالمعلمات:
\n- \n
date(اختياري) — سلسلة نصية، رقم (timestamp)، كائن Date، أو كائن Day.js آخر \n format(اختياري) — سلسلة تنسيق للتحليل، إذا كان date سلسلة نصية \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\n2. format() — تنسيق التاريخ
\nما يفعله: يحول كائن التاريخ إلى سلسلة نصية وفقاً لتنسيق محدد