كائن `Date`

تشرح هذه المقالة كائن Date۔

سنشرح كائن Date خطوة بخطوة، بدءًا من الآليات الأساسية إلى العمليات الشائعة الاستخدام في العمل العملي، مع أمثلة واضحة۔

YouTube Video

كائن Date

ما هو كائن Date؟

كائن Date في جافاسكريبت هو كائن قياسي للتعامل مع التواريخ والأوقات۔ يُدير داخليًا التاريخ والوقت بناءً على عدد المللي ثانية المنقضية منذ 1 يناير 1970, 00:00:00 بالتوقيت العالمي المنسق (UTC)۔

أولاً، دعنا ننشئ كائن Date يمثل التاريخ والوقت الحاليين، ونتحقق من محتواه۔

1const now = new Date();
2console.log(now);
  • ينشئ هذا الكود كائن Date يمثل التاريخ والوقت الحاليين عند لحظة التنفيذ۔ يعتمد تنسيق العرض على بيئة التنفيذ، مثل المتصفح أو نظام التشغيل۔

كيفية إنشاء كائن Date

يمكن إنشاء كائنات Date بعدة طرق حسب احتياجاتك۔ نقطة مهمة جدًا من السهل الوقوع فيها هي أن وسيطة المنشئ للشهر تبدأ من الصفر، أي أن الأشهر تبدأ من 0۔

1const d1 = new Date();                     // Current date and time
2const d2 = new Date("2025-01-01");         // Create from an ISO date string
3const d3 = new Date(2025, 0, 1);           // January 1, 2025 (month is zero-based)
4const d4 = new Date(2025, 0, 1, 10, 30);   // January 1, 2025, 10:30
5
6console.log(d1, d2, d3, d4);
  • في new Date(year, month, day)، يعني حقل month أن 0 هو يناير و11 هو ديسمبر۔ إذا لم تكن على علم بهذه المواصفة، قد تنشئ تاريخًا يختلف بشهر واحد عن المطلوب دون قصد، لذا يجب الانتباه دائمًا۔

استرجاع كل عنصر من التاريخ والوقت

يمكنك استخراج السنة، الشهر، اليوم، الوقت، ويوم الأسبوع بشكل منفصل من كائن Date۔ جميع دوال الجلب تُرجع القيم كأرقام۔

1const date = new Date();
2
3console.log(date.getFullYear()); // Year
4console.log(date.getMonth());    // Month (0-based: 0 = January)
5console.log(date.getDate());     // Day of the month
6console.log(date.getHours());    // Hours
7console.log(date.getMinutes());  // Minutes
8console.log(date.getSeconds());  // Seconds
9console.log(date.getDay());      // Day of the week (0 = Sunday, 6 = Saturday)
  • كما هو الحال عند الإنشاء، يجب الانتباه أن getMonth() تبدأ من الصفر أيضًا۔ عند استخدامها للعرض، من الشائع إضافة 1 لتعديل القيمة۔
  • تعيد الدالة getDay() يوم الأسبوع كرقم۔ الرقم 0 يمثل يوم الأحد، والرقم 6 يمثل يوم السبت۔

تعديل التواريخ والأوقات

كائن Date كائن قابل للتغيير، مما يعني أنه يمكنك تغيير قيمه لاحقًا۔ هذه الخاصية مفيدة، لكن يجب الحذر من الآثار الجانبية غير المرغوبة۔

يمكنك استخدام طرق set لتغيير قيم كائن Date الموجود۔

1const date = new Date("2025-01-01");
2
3date.setFullYear(2026);
4date.setMonth(5);   // June
5date.setDate(15);
6
7console.log(date);
  • دالة setMonth() تبدأ من الصفر أيضًا۔ يتم تعديل الكائن الأصلي بشكل مباشر۔

إضافة وطرح التواريخ

من الشائع إجراء عمليات حسابية على التواريخ باستخدام المللي ثانية أو باستخدام setDate()۔ للحسابات المعتمدة على الأيام، يعتبر استخدام setDate() بديهيًا وآمنًا بشكل خاص۔

1const date = new Date("2025-01-01");
2
3date.setDate(date.getDate() + 7);
4console.log(date);
  • في هذا المثال، نقوم بحساب التاريخ بعد 7 أيام من التاريخ المحدد۔ حتى إذا تجاوز الجمع إلى شهر جديد، يتم التعديل تلقائيًا۔

مقارنة كائنات Date

يمكن مقارنة كائنات Date كأرقام۔ وذلك لأن المقارنة تتم على قيمة المللي ثانية الداخلية۔

1const a = new Date("2025-01-01");
2const b = new Date("2025-01-10");
3
4console.log(a < b);   // true
5console.log(a > b);   // false
  • إذا أردت تحديد ترتيب التواريخ، فلا حاجة لأي تحويل إضافي۔ يمكنك استخدام معاملات المقارنة مباشرة۔

التعامل مع الطوابع الزمنية (المللي ثانية)

يمكن تحويل كائن Date إلى ومن الأرقام التي تمثل المللي ثانية (الطوابع الزمنية)۔ يُستخدم هذا الشكل كثيرًا في واجهات البرمجة أو تكامل قواعد البيانات۔

1const now = Date.now();
2console.log(now);
3
4const date = new Date(now);
5console.log(date);
  • تُرجع Date.now() الوقت الحالي بوحدة المللي ثانية۔ يكون ذلك مفيدًا جدًا عندما تريد تخزين أو مقارنة القيمة كرقم۔

تنسيق التواريخ كسلاسل نصية

عرض كائن Date كما هو غالبًا يعطي تنسيقًا قد لا يتناسب مع احتياجاتك۔ لذلك، يجب عليك تنسيقه صراحةً وفقًا لمتطلباتك۔

1const date = new Date("2025-01-01");
2
3const formatted = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
4console.log(formatted);
  • من خلال تنسيقه يدويًا بهذه الطريقة، يمكنك التحكم الكامل في تنسيق العرض۔ في الأعمال العملية، غالبًا ما تُستخدم مكتبات لهذا الغرض۔

الفرق بين التوقيت العالمي (UTC) والتوقيت المحلي

يوفر كائن Date طرقًا للتعامل مع كل من الوقت المحلي و UTC۔ من المهم فهم هذا الفرق بشكل صحيح لتكامل الخوادم والتوافق الدولي۔

1const date = new Date();
2
3console.log(date.getHours());    // Local time (hours)
4console.log(date.getUTCHours()); // UTC time (hours)
  • جميع دوال getUTC* تُرجع القيم دائمًا بناءً على UTC۔ كن حذرًا بشكل خاص عند معالجة البيانات عبر المناطق الزمنية۔

الاحتياطات عند استخدام كائنات التاريخ

كائن Date مريح ولكنه يحتوي أيضًا على بعض الجوانب المربكة۔ خصوصًا، بدء الشهر من الصفر وقابلية التغيير من الأسباب الشائعة لظهور الأخطاء۔

دعونا ننظر في أمثلة محددة أدناه لنرى تأثير حقيقة أن كائن Date قابل للتغيير۔

1const original = new Date("2025-01-01");
2const copy = new Date(original);
3
4copy.setDate(10);
5
6console.log(original);
7console.log(copy);
  • إذا كنت ترغب في الاحتفاظ بالتاريخ والوقت الأصليين، أنشئ دائمًا نسخة۔ الوعي بهذه النقطة فقط سيساعدك على تجنب الأخطاء غير المتوقعة۔

أسباب صعوبة التعامل مع كائن Date ومعايير استخدام المكتبات

يوفر كائن Date ميزات كافية كدالة قياسية، ولكن هناك مواقف عملية يكون من الصعب استخدامه فيها۔ تشمل المشكلات الشائعة أن الشهور وأيام الأسبوع تبدأ من الصفر، واحتمالية الخلط بين الوقت المحلي وUTC، وحقيقة أن الكائن قابل للتغيير۔ يمكن أن تؤدي هذه المشكلات إلى المزيد من الأخطاء كلما زاد التعامل مع التواريخ۔

يعد استخدام Date كافياً لاستخراج ومقارنة التواريخ البسيطة، لكن قابلية قراءة وصيانة الكود تميل إلى الانخفاض مع زيادة العمليات الحسابية المتعلقة بالتواريخ أو تنسيقات العرض۔

إذا كانت لديك متطلبات مثل ما يلي، فقد ترغب في التفكير في استخدام مكتبات تواريخ خفيفة مثل dayjs أو date-fns۔

  • تحتاج للتعامل مع المناطق الزمنية بشكل صريح
  • تحتاج كثيراً إلى إجراء عمليات حسابية على التواريخ أو الفواصل الزمنية
  • ترغب في تغيير تنسيق العرض بشكل مرن
  • ترغب في التعامل مع التواريخ والأوقات بطريقة غير قابلة للتغيير

الملخص

كائنات Date هي الأداة الأساسية للتعامل مع التاريخ والوقت في جافاسكريبت۔ من خلال فهم تفاصيله وأداء الإنشاء، والاسترجاع، والحساب، والتنسيق بشكل صحيح، يمكنك استخدامه بأمان في الأعمال الواقعية۔

بعد إتقان الأساسيات، يعد استخدام مكتبات التواريخ عند الحاجة خيارًا عمليًا۔

يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔

YouTube Video