العمل مع التواريخ والوقت في JavaScript (Node.js): من الأساسيات إلى التقنيات المتقدمة
العمل مع التواريخ والوقت هو أحد أكثر المهام شيوعًا في تطوير الويب. سواء كان تسجيل الأحداث، أو معالجة بيانات المستخدم، أو جدولة المهام، أو عرض الطوابع الزمنية — لا يمكن الاستغناء عن القدرة على إدارة التواريخ في JavaScript. في هذه المقالة، سنستعرض جميع الجوانب الرئيسية للعمل مع التواريخ في بيئة Node.js: من الإنشاء والتنسيق إلى المعالجات المعقدة مع المناطق الزمنية واستخدام المكتبات الشائعة.
الأساسيات: كائن Date في JavaScript
الكائن المدمج Date هو الأساس للعمل مع التواريخ. يخزن عدد الميلي ثانية المنقضية منذ 1 يناير 1970 (حقبة Unix).
إنشاء تاريخ
هناك عدة طرق لإنشاء نسخة من Date:
// التاريخ والوقت الحاليينconst now = new Date();console.log(now); // 2025-03-15T10:30:00.000Z
// من الميلي ثانية (Unix timestamp)const fromTimestamp = new Date(1742025000000);console.log(fromTimestamp); // 2025-03-15T10:30:00.000Z
// من سلسلة نصية (ISO 8601)const fromString = new Date('2025-03-15T10:30:00');console.log(fromString);
// من المكونات (السنة، الشهر، اليوم، الساعة، الدقيقة، الثانية، الميلي ثانية)const fromComponents = new Date(2025, 2, 15, 10, 30, 0, 0); // الأشهر: 0-11console.log(fromComponents); // March 15, 2025 10:30:00هام: الأشهر في JavaScript تبدأ من 0 (يناير — 0، ديسمبر — 11).
الحصول على مكونات التاريخ
طرق استخراج الأجزاء الفردية من التاريخ:
const date = new Date('2025-03-15T10:30:45.123Z');
console.log(date.getFullYear()); // 2025console.log(date.getMonth()); // 2 (مارس)console.log(date.getDate()); // 15console.log(date.getDay()); // 6 (السبت، 0 - الأحد)console.log(date.getHours()); // 10console.log(date.getMinutes()); // 30console.log(date.getSeconds()); // 45console.log(date.getMilliseconds());// 123console.log(date.getTime()); // الميلي ثانية منذ الحقبةتنسيق التواريخ في Node.js
يوفر Date القياسي إمكانيات تنسيق محدودة. للإخراج بشكل قابل للقراءة، استخدم toLocaleDateString() و toLocaleString().
const date = new Date('2025-03-15T10:30:00');
// تنسيق محليconsole.log(date.toLocaleDateString('ar-SA')); // ١٥/٠٣/٢٠٢٥console.log(date.toLocaleTimeString('ar-SA')); // ١٠:٣٠:٠٠console.log(date.toLocaleString('ar-SA')); // ١٥/٠٣/٢٠٢٥, ١٠:٣٠:٠٠ ص
// مع خياراتconst options = { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long', hour: '2-digit', minute: '2-digit'};console.log(date.toLocaleString('ar-SA', options)); // السبت، 15 مارس 2025، 10:30 صتنسيق مخصص
للتحكم الكامل، اكتب دالة بسيطة:
function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') { const map = { YYYY: date.getFullYear(), MM: String(date.getMonth() + 1).padStart(2, '0'), DD: String(date.getDate()).padStart(2, '0'), HH: String(date.getHours()).padStart(2, '0'), mm: String(date.getMinutes()).padStart(2, '0'), ss: String(date.getSeconds()).padStart(2, '0'), }; return format.replace(/YYYY|MM|DD|HH|mm|ss/g, match => map[match]);}
console.log(formatDate(new Date(), 'DD.MM.YYYY')); // 15.03.2025console.log(formatDate(new Date(), 'HH:mm:ss')); // 10:30:00التلاعب بالتواريخ: الإضافة، الطرح، المقارنة
يمكن تعديل التواريخ مباشرة عبر طرق set* أو من خلال العمل مع الميلي ثانية.
إضافة وطرح الوقت
const date = new Date('2025-03-15T10:30:00');
// إضافة 5 أيامdate.setDate(date.getDate() + 5);console.log(date); // 2025-03-20T10:30:00
// إضافة
```