ما هو Moment.js؟

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

لماذا نستخدم مكتبة معالجة التواريخ؟

كائن Date الأصلي في JavaScript صعب التعامل معه بشكل معروف. لديه سلوك غير متسق عبر المتصفحات، وفهرسة شهر مربكة (0-11 بدلاً من 1-12)، وخيارات تنسيق محدودة، ولا يدعم المناطق الزمنية مدمجًا. تحل مكتبات التواريخ مثل Moment.js هذه المشكلات من خلال توفير واجهة برمجة تطبيقات موثوقة وموثقة جيدًا. تتعامل مع الحالات الحدية مثل انتقالات التوقيت الصيفي، والسنوات الكبيسة، والتنسيق المتعلق بالمحلية تلقائيًا، مما يوفر على المطورين كتابة منطق تاريخ عرضة للأخطاء من الصفر.

وصف الأداة

Moment.js Playground هو بيئة تفاعلية تعمل في المتصفح لتجربة مكتبة Moment.js. اكتب ونفّذ شيفرة JavaScript مباشرة في المحرّر مع وصول كامل إلى Moment.js وMoment Timezone. يقوم الملعب تلقائيًا بتشغيل الشيفرة أثناء الكتابة (مع تقليل التكرار) ويعرض كل مخرجات الكونسول في لوحة على شكل طرفية أسفل الصفحة. إنه مثالي لتعلم Moment.js، اختبار سلاسل تنسيق التواريخ، تصحيح حسابات التواريخ، ونمذجة منطق الوقت دون الحاجة لإعداد بيئة تطوير.

أمثلة

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

const now = moment();
console.log(now.format("MMMM Do, YYYY"));
// Output: December 30th, 2025

console.log(now.format("dddd, h:mm A"));
// Output: Monday, 3:45 PM

تحليل صيغ تواريخ مختلفة:

const date1 = moment("2025-12-25", "YYYY-MM-DD");
const date2 = moment("25/12/2025", "DD/MM/YYYY");
const date3 = moment("Dec 25, 2025", "MMM D, YYYY");

console.log(date1.format("dddd")); // Thursday
console.log(date2.isValid()); // true
console.log(date3.month()); // 11 (0-indexed)

حساب الوقت النسبي:

const past = moment().subtract(3, "days");
const future = moment().add(2, "weeks");

console.log(past.fromNow()); // 3 days ago
console.log(future.fromNow()); // in 14 days
console.log(past.from(future)); // 17 days ago

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

const date = moment("2025-01-15");

const nextMonth = date.clone().add(1, "month");
const lastWeek = date.clone().subtract(1, "week");
const endOfMonth = date.clone().endOf("month");

console.log(nextMonth.format("YYYY-MM-DD")); // 2025-02-15
console.log(lastWeek.format("YYYY-MM-DD")); // 2025-01-08
console.log(endOfMonth.format("YYYY-MM-DD")); // 2025-01-31

العمل مع الفترات الزمنية:

const start = moment("2025-01-01");
const end = moment("2025-12-31");

const duration = moment.duration(end.diff(start));

console.log(duration.asDays() + " days"); // 364 days
console.log(duration.asWeeks() + " weeks"); // 52 weeks
console.log(duration.humanize()); // a year

مقارنة التواريخ:

const date1 = moment("2025-06-15");
const date2 = moment("2025-12-25");

console.log(date1.isBefore(date2)); // true
console.log(date1.isAfter(date2)); // false
console.log(date1.isSame(date2, "year")); // true
console.log(date1.isBetween("2025-01-01", "2025-08-01")); // true

العمل مع المناطق الزمنية:

const now = moment();

console.log(now.tz("America/New_York").format("h:mm A z"));
console.log(now.tz("Europe/London").format("h:mm A z"));
console.log(now.tz("Asia/Tokyo").format("h:mm A z"));

الميزات

  • مكتبة Moment.js كاملة: الوصول إلى جميع وظائف Moment.js بما في ذلك التحليل، التنسيق، المعالجة، والمقارنة
  • دعم المناطق الزمنية: Moment Timezone مُحمَّل مسبقًا للعمل مع المناطق الزمنية حول العالم
  • تنفيذ الكود مباشرة: يتم تشغيل الشيفرة تلقائيًا أثناء الكتابة مع تقليل ذكي للتكرار
  • طرفية مدمجة: عرض مخرجات الكونسول فورًا دون فتح أدوات مطور المتصفح
  • تمييز بناء الجملة: تمييز بناء جملة JavaScript لتحسين قابلية قراءة الشيفرة
  • معالجة الأخطاء: تُعرض الأخطاء في وقت التشغيل بوضوح في مخرجات الطرفية

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

  • تعلم Moment.js: تجربة الـ API ورؤية النتائج فورًا دون إعداد مشروع
  • اختبار سلاسل التنسيق: تجربة رموز تنسيق مختلفة للحصول على المخرجات الدقيقة المطلوبة
  • تصحيح حسابات التواريخ: اختبار عمليات حسابية معقدة قبل دمجها في التطبيق
  • تحويل المناطق الزمنية: تحويل الأوقات بسرعة بين مناطق زمنية مختلفة
  • صيانة الشيفرة القديمة: اختبار مقتطفات شيفرة Moment.js أثناء صيانة التطبيقات القائمة

رموز التنسيق الشائعة

الرمز الوصف المثال
YYYY سنة بأربعة أرقام 2025
YY سنة بمئتي رقم 25
MM شهر برقمين 01-12
MMM اسم شهر مختصر Jan, Feb
MMMM اسم شهر كامل January
DD يوم برقمين 01-31
Do يوم مع الترتيب 1st, 2nd, 3rd
dddd اسم اليوم بالكامل Monday
ddd اسم اليوم مختصر Mon
HH ساعة بنظام 24 00-23
hh ساعة بنظام 12 01-12
mm دقائق 00-59
ss ثوانٍ 00-59
A AM/PM (حرف كبير) AM, PM
a am/pm (حرف صغير) am, pm
z اختصار المنطقة الزمنية EST, PST
Z إزاحة المنطقة الزمنية +05:00

مرجع الطرق الشائعة

الطريقة الوصف المثال
moment() إنشاء لحظة حالية moment()
format(string) تنسيق إلى سلسلة moment().format("YYYY-MM-DD")
add(n, unit) إضافة وقت moment().add(7, "days")
subtract(n, unit) طرح وقت moment().subtract(1, "month")
startOf(unit) بداية الوحدة moment().startOf("week")
endOf(unit) نهاية الوحدة moment().endOf("month")
fromNow() الوقت النسبي moment("2025-01-01").fromNow()
diff(moment) الفرق momentA.diff(momentB, "days")
isBefore(moment) هل هو قبل momentA.isBefore(momentB)
isAfter(moment) هل هو بعد momentA.isAfter(momentB)
isSame(moment, unit) هل هو نفس momentA.isSame(momentB, "month")
isValid() التحقق من الصلاحية moment("invalid").isValid()
clone() إنشاء نسخة moment().clone()
tz(zone) تحويل المنطقة الزمنية moment().tz("America/New_York")

وحدات الوقت

يدعم Moment.js هذه الوحدات الزمنية للعمليات add، subtract، startOf، endOf، وdiff:

  • years / y (سنوات)
  • quarters / Q (ربع سنة)
  • months / M (شهور)
  • weeks / w (أسابيع)
  • days / d (أيام)
  • hours / h (ساعات)
  • minutes / m (دقائق)
  • seconds / s (ثوانٍ)
  • milliseconds / ms (مللي ثانية)