المقال الاصلي بكتابة Vijit Ail

تمت الترجمة بواسطة Ayman Antar Taha

العديد من التطبيقات التي تقوم بإنشائها من الوارد أن تحتوي على نوع ما من التواريخ ، سواء كان ذلك تاريخ إنشاء مورد ما أو الطابع الزمني (Timestamp) لنشاط ما.

قد يكون التعامل مع تنسيقات التاريخ والطوابع الزمنية (Timestamps) مرهقًا. في هذا الدليل، سوف تتعلم كيفية الحصول على التاريخ الحالي بعدة طرق.
تحوي لغة JavaScript علي الكائن Date المدمج بها، يخزن التاريخ والوقت ويوفر طرقًا للتعامل معهما.

لإنشاء كائن Date جديد قُم بإستخدم الكلمة المفتاحية new:

const date = new Date();

يحتوي الكائن Date على قيمة تمثل الوقت الذي مر منذ ( 1 يناير 1970 ) بوحدة المللي ثانية.

يمكنك تمرير نص (string) إلى مُنشئ التاريخ ( Date constructor ) لإنشاء كائن Date لتاريخ محدد:

const date = new Date('Jul 12 2011');

للحصول علي السنة الحالية، استخدم دالة getFullYear() للكائن Date. لاحظ انه ينتج عن استخدام دالة getFullYear() سنة التاريخ المحدد.

 const currentYear = date.getFullYear();

 console.log(currentYear); //2020

وبالمثل ، هناك طرق للحصول على اليوم الحالي من الشهر والشهر الحالي:

 const today = date.getDate();

const currentMonth = date.getMonth() + 1; 

ينتج عن دالة getDate() قيمة في النطاق (31-1) تعبر عن اليوم الحالي من الشهر.

ينتج عن دالة date.getMonth() شهر التاريخ المحدد. إحدى النقاط التي يجب ملاحظتها حول دالة date.getMonth() هي انها تُنتج قيمًا في النطاق (11-0) حيث يكون الرقم 0 لشهر يناير و 11 لشهر ديسمبر. وهذا ما استعدي اضافة 1 لتكون قيمة الشهر مضبوطة.

التاريخ الأن

now() هي دالة للكائن Date ينتج عنها قيمة بلمللي ثانية تساوي الوقت المنقضي منذ (1 يناير 1970) حتي اللحظة. يمكن تمرير القيمة الناتجة عن الدالة now() الي مُنشئ التاريخ (Date constructor) لإنشاء كائن Date جديد:

 const timeElapsed = Date.now();

 const today = new Date(timeElapsed)

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

يمكنك تنسيق التاريخ بتنسيقات متعددة (GMT, ISO,وغيرهم...) باستخدام دوال الكائن Date.

ينتج عن استخدام دالة toDateString() تاريخ له نٌسق مألوف ويمكن للناس قراءته بسهولة.

today.toDateString(); // "Sun Jun 14 2020"

ينتج عن استخدام دالة toISOString() التاريخ بتنسيق ISO 8601 المُوسع:

today.toISOString(); // "2020-06-13T18:30:00.000Z"   

ينتج عن استخدام دالة toUTCString() التاريخ بتنسيق المنطقة الزمنية UTC:

today.toUTCString(); / "Sat, 13 Jun 2020 18:30:00 GMT" 

ينتج عن دالة toLocaleDateString() التاريخ بتنسيق معتمد علي المنطقة المحلية:

today.toLocaleDateString(); // "6/14/2020" 

يمكنك العثورعلى المرجع الكامل لطرق الحصول علي التاريخ في وثائق MDN.

دالة منسق التاريخ المخصص

بصرف النظر عن التنسيقات المذكورة في القسم أعلاه، قد يكون لتطبيقك تنسيق مختلف للتاريخ علي سبيل المثال yy/dd/mm او yyyy-dd-mm او اي شئ مشابه.
لمعالجة هذه المشكلة، سيكون من الأفضل إنشاء دالة قابلة لإعادة الاستخدام بحيث يمكن استخدامها عبر مشاريع متعددة.

لذلك في هذا القسم، دعنا ننشئ الدالة التي ستحول التاريخ الي التنسيق المخصص المُدخل اليها.

const today = new Date() ;  

function formatDate(date, format ) {

//

}

formatDate(today, 'mm/dd/yy');

نحتاج إلى استبدال القيم 'dd','mm'و 'yy'من نص التنسيق الممر الي الدالة بقيم الشهر واليوم والسنة.

للقيام بذلك يمكنك استخدام دالة replace() كما هو موضح أدناه:

 format.replace('mm', date.getMonth() + 1);

لكن هذا سيؤدي إلى الكثير من تسلسل الأوامر ويجعل الامر اكثر صعوبة أثناء محاولتك جعل الدالة أكثر مرونة:

format.replace('mm', date.getMonth() + 1)
	
	.replace('yy', date.getFullYear())
	
 	.replace('dd', date.getDate());

يمكنك استخدام صيغة عادية بدلاً من طرق التسلسل باستخدام دالة replace().
قم أولاً بإنشاء كائن لكل جزء من اجزاء نص التنسيق علي هيئة ازواج تعبر عن كل جزء وقيمتة:

const formatMap = { 
mm: date.getMonth() + 1,
dd: date.getDate(),
yy: date.getFullYear().toString().slice(-2),
yyyy: date.getFullYear()
};

بعد ذلك ، استخدم الصيغة العادية لعمل مطابقة (Matching) للنصوص واستبدالها:

formattedDate = format.replace(/mm|dd|yy|yyy/gi, matched => map[matched]);

تبدو الدالة الكاملة علي النحو التالي:

function formatDate(date, format) {
const map = {
    mm: date.getMonth() + 1,
    dd: date.getDate(),
    yy: date.getFullYear().toString().slice(-2),
    yyyy: date.getFullYear()
}

return format.replace(/mm|dd|yy|yyy/gi, matched => map[matched])
}

يمكنك أيضًا إضافة القدرة على تنسيق الطوابع الزمنية في الدالة.

خاتمة

آمل أن يكون لديك الآن فهم أفضل للكائن Date. يمكنك أيضًا استخدام مكتبات أخرى تابعة لجهات خارجية مثل datejs و moment للتعامل مع التواريخ في تطبيقك.
الي القاء، وحتي المرة القادمة، حافظ على سلامتك واستمر في العمل.