شارك هذا المقال:
التاريخ من الأمور الغريبة في javascript , نستخدم من أجله مكتبات مثل Date-fns و Moment والتي نحتاجها للعمل مع التاريخ والوقت. لكننا لسنا بحاجة دائماً إلى استخدام المكتبات, يمكن أن يكون التاريخ بسيطاً جداً إذا كنّا نعرف ما يجب علينا الانتباه إليه، لذلك في هذه المقالة سنطلعكم على كل ما تحتاجون لمعرفته حول كائن التاريخ (Date Object) في javascript.
ولكن قبل ذلك , لنأخذ نظرة عامة عن معنى مصطلح المناطق الزمنية.
هناك المئات من المناطق الزمنية في عالمنا، ولكن في javascript ، نحن نهتم فقط بالوقت المحلي والتوقيت العالمي (UTC).
يشير التوقيت المحلي إلى المنطقة الزمنية التي قمت بتعيينها على الكمبيوتر الخاص بك، UTC مترادفة مع توقيت غرينتش (GMT) وبشكل افتراضي، تعطي ال JavaScript طريقة تاريخ بالتوقيت المحلي ولكن يمكنك الحصول على UTC فقط إذا حددت UTC.
لنتحدث الآن عن إنشاء التواريخ.
يمكنك إنشاء تاريخ باستخدام new Date(), وهناك أربع طرق متاحة لاستخدام new Date() :
إنشاء تواريخ مع سلسلة تاريخ :
في طريقة سلسلة التاريخ، تقوم بإنشاء تاريخ عن طريق تمرير سلسلة تاريخ إلى new Date() كما هو موضح:
new Date('1988-02-03')
نستخدم طريقة سلسلة التاريخ عندما نكتب التواريخ, وهذا أمر طبيعي لأننا نستخدم سلاسل التاريخ في حياتنا اليومية، ونلاحظ أن كتابة التاريخ بالشكل "03-02-1988" سيتم فهمه من قبل javascript بأن هذا التاريخ هو 3 شباط 1988 ولكن إذا كتبت التاريخ بالشكل "1988-02-03" وكتبت الكود التالي:
new Date('02-03-1988')
ستكون النتيجة Invalid Date ولن يتم فهم هذه السلسلة من قبل javascript.
تُفسَر سلاسل التاريخ بشكل مختلف في المناطق المختلفة من العالم. على سبيل المثال ، 11-06-2019 هو 11 يونيو 2019 أو 6 نوفمبر 2019.
لكن لا يمكنك التأكد من النوع الذي أشير إليه في مثالي السابق إلا إذا كنت تعرف نظام التاريخ الذي أستخدمه. في JavaScript ، إذا كنت تريد استخدام سلسلة تاريخ ، فأنت بحاجة إلى استخدام تنسيق مقبول وموحد في جميع أنحاء العالم.
أحد هذه التنسيقات هو تنسيق :
ISO 8601 Extended
والقيم المستخدمة هي:
YYYY : 4 محارف للتعبير عن السنة
MM : محرفين للتعبير عن الشهر
DD : محرفين للتعبير عن اليوم
- : محددات التاريخ
T : يشير الى بداية الوقت
HH : محرفين للدلالة إلى الساعة (0 إلى 23)
Mm : محرفين للدلالة إلى الدقائق ( 0 إلى 59 )
Ss : محرفين للدلالة إلى الثواني ( 0 إلى 59 )
Sss : ثلاث محارف للدلالة إلى ميللي ثانية ( 0 إلى 999 )
:: محددات الوقت
Z : إذا كانت Z موجودة ، فسيتم تعيين التاريخ على UTC .
إذا لم يكن Z موجوداً، فسيكون ذلك بالتوقيت المحلي.
الساعات والدقائق والثواني وميلي ثانية اختيارية إذا كنت تقوم بإنشاء تاريخ. لذلك ، إذا كنت ترغب في إنشاء تاريخ ليوم 11 يونيو 2019 ، يمكنك كتابة التالي:
new Date('2019-06-11')
إنشاء التواريخ مع وسيط :
يمكنك تمرير ما يصل إلى سبع وسائط لإنشاء تاريخ / وقت.
السنة: 4 محارف.
الشهر: محرفين (0 إلى 11) يتم أخذ الرقم 0 افتراضياً اذا لم يتم تعيين شيء محدد .
اليوم: محرفين (1-31) يتم أخذ 1 افتراضياً إذا لم يتم التحديد.
الساعة: محرفين (0-23) يتم أخذ 0 افتراضياً إذا لم يتم التحديد.
الدقائق: محرفين (0-59) يتم أخذ 0 افتراضياً إذا لم يتم التحديد.
ثواني: محرفين (0-59) يتم أخذ 0 افتراضياً إذا لم يتم التحديد.
ميلي ثانية: ثلاث محارف (0-999) يتم أخذ 0 افتراضياً إذا لم يتم التحديد.
مثال:
new Date(2019, 5, 3, 5, 23, 59)
أثناء الانتقال من اليسار إلى اليمين، تقوم بقراءة القيم كالتالي: السنة - الشهر - اليوم - الساعات - الدقائق - الثواني - ميلي ثانية.
هنا الشهر 5 يدل على شهر حزيران حيث أن الجزء الأكثر إشكالية مع التاريخ هو أن قيمة الشهر مفهرسة صفراً، كالتالي:
يناير === 0 ، فبراير === 1 ، مارس === 2 وهكذا، ليس لدينا أي فكرة لماذا يكون الشهر في JavaScript مفهرساً صفراً ، لكنه كذلك.
بمجرد اعتماد هذه الفكرة حول التاريخ في JavaScript ، يصبح التعامل مع التواريخ أسهل.
إنشاء التواريخ مع الطوابع الزمنية:
في javascript، نادراً ما تستخدم الطوابع الزمنية لإنشاء التواريخ، فهي تعبر عن أجزاء الميللي ثانية المنقضية. لا تُستخدم الطوابع الزمنية سوى للمقارنة بين تواريخ مختلفة.
إنشاء التواريخ مع عدم وجود وسيط:
إذا قمت بإنشاء تاريخ بدون أي وسيط، فستحصل على تعيين تاريخ بالوقت الحالي (بالتوقيت المحلي).
ويكون الكود بالشكل:
new Date()
ملخص حول إنشاء التواريخ :
هناك أربعة طرق إنشاء محتملة:
مع سلسلة التاريخ
مع وسائط
مع الطابع الزمني
مع عدم وجود الحجج
لا تقم أبداً بإنشاء تاريخ باستخدام طريقة سلسلة التاريخ، من الأفضل إنشاء التواريخ باستخدام طريقة الوسائط، تذكر أنَّ الشهر مفهرس صفر في JavaScript .
الآن ، دعنا نتحدث عن تحويل تاريخ إلى سلسلة قابلة للقراءة.
تمنحك معظم لغات البرمجة أداة تنسيق لإنشاء أي تنسيق تاريخ تريده.
على سبيل المثال ، في PHP ، يمكنك استخدام تنسيق التاريخ ("d M Y") للتعبير عن تاريخ مثل 23 يناير 2019 ولكن لا توجد طريقة سهلة لتنسيق التاريخ في JavaScript .
كائن التاريخ الأصلي يأتي مع سبع طرق للتنسيق, بحيث تمنحك كل طريقة من هذه الطرق السبعة قيمة محددة .
1. toString تعطي : Wed Jan 23 2019 17:23:42 GMT+0800 (Singapore Standard Time)
أي : الأربعاء 23 يناير 2019 17:23:42 بتوقيت جرينتش + 0800 (توقيت سنغافورة الرسمي)
2. toDateString تعطي Wed Jan 23 2019
أي : الأربعاء 23 يناير 2019
3. toLocaleString تعطي 23/01/2019 ، 17:23:42
4. toLocaleDateString تعطي 23/01/2019
5. toGMTString تعطي Wed، 23 Jan 2019 09:23:42 GMT
6. toUTCString تعطي Wed، 23 Jan 2019 09:23:42 GMT
7. toISOString تعطي 2019-01-23T09: 23: 42.079Z
إذا كنت بحاجة إلى تنسيق مخصص، فأنت بحاجة إلى إنشائه بنفسك.
لنفترض أنك تريد شيئاً مثل Thu ، 23 كانون الثاني (يناير) 2019، لإنشاء هذه القيمة، يلزمك معرفة طرق التاريخ التي تأتي مع كائن التاريخ Date object .
للحصول على التواريخ ، يمكنك استخدام إحدى هذه الطرق الأربعة:
getFullYear تحصل على 4 محارف للتعبير عن السنة وفقاً للتوقيت المحلي .
getMonth تحصل على شهر واحد من السنة (0 حتى 11 شهراً) حسب التوقيت المحلي, صفر تعبر عن الشهر الأول.
getDate تحصل على يوم من الشهر (1-31) وفقًا للتوقيت المحلي.
getDay تحصل على يوم من أيام الأسبوع (0-6) وفقاً للتوقيت المحلي. يبدأ يوم الأسبوع بالأحد (0) وينتهي يوم السبت (6).
بفرض أننا أدخلنا تاريخ يوم الخميس 23 كانون الأول 2019 بالشكل:
const d = new Date(2019, 0, 3);
const year = d.getFullYear(); //2019
const date = d.getDate(); //23
ونلاحظ أنه ليس من السهل أن نطبع يوم الخميس أو شهر كانون الأول.
إذا احتجت إلى إنشاء وقت بتنسيق مخصص، فيمكنك استخدام الطرق التالية:
getHours الحصول على ساعات (0-23) حسب التوقيت المحلي.
getMinutes الحصول على دقائق (0-59) وفقاً للتوقيت المحلي.
getSeconds تحصل على ثوانٍ (0-59) وفقاً للتوقيت المحلي.
getMilliseconds يحصل على مللي ثانية (0-999) وفقاً للتوقيت المحلي.
الآن دعونا نتحدث عن مقارنة التواريخ..
إذا كنت تريد معرفة ما إذا كان التاريخ يأتي قبل أو بعد تاريخ آخر، فيمكنك مقارنتها مباشرةً بـ> و <و> = و <= ولكن سيكون الأمر أكثر صعوبة إذا كنت تريد التحقق مما إذا كان تاريخان يقعان في نفس الوقت بالضبط فلا يمكنك مقارنتها بـ == أو ===.
مثال:
const a = new Date(2019, 0, 3);
const b = new Date(2019, 4, 3);
alert(a < b); //true
يمكنك استخدام هذه الطرق لتعيين تاريخ / وقت من تاريخ آخر:
setFullYear تعيين السنة من 4 محارف بالتوقيت المحلي.
setMonth تعيين شهر من السنة في التوقيت المحلي.
setDate تعيين يوم من الشهر بالتوقيت المحلي.
setHours تعيين ساعات بالتوقيت المحلي.
setMinutes تعيين دقائق في التوقيت المحلي.
setSeconds تعيين ثواني في التوقيت المحلي.
setMilliseconds تعيين ميللي ثانية في التوقيت المحلي.
على سبيل المثال ، إذا كنت تريد تعيين تاريخ الخامس عشر من الشهر ، يمكنك استخدام setDate (15)
const a = new Date(2019, 0, 3)
a.setDate(15)
alert(a); //Tue Jan 15 2019 00:00:00 GMT+0200
إذا كنت ترغب في تعيين الشهر إلى يونيو، يمكنك استخدام setMonth .
على الرغم من الانتشار الهائل لمكتبات الوقت و التاريخ في جافاسكريبت , ليس هنالك دائماً داع لاستخدامها , فعندما تفهم الأساسيات تماماً يمكنك بسهولة التعامل مع اللغة مباشرة دون الحاجة لمكتبات مساعدة , هل ساعدتك هذه المقالة لفهم التعامل مع التاريخ و الوقت في جافاسكريبت ؟ أسعدنا بتعليقك على صفحاتنا في وسائل التواصل الاجتماعي :)
https://www.facebook.com/naqrahOfficial