العمل مع التواريخ في TypeScript: نظرة على أفضل المكتبات
TypeScript، باعتبارها إضافة صارمة في التوصيف فوق JavaScript، ترث جميع مشاكل العمل مع التواريخ المتأصلة في Date الأصلي — واجهة برمجة تطبيقات غير بديهية، قابلية التغيير، مشاكل مع المناطق الزمنية والتحليل. لحسن الحظ، يقدم نظام TypeScript البيئي عدة مكتبات قوية تحل هذه المشاكل. في هذه المقالة، سنستعرض ثلاث أدوات شائعة: date-fns و Luxon و Day.js، ونقارن إمكانياتها ونقدم أمثلة عملية للكود.
1. date-fns — معيارية ووظيفية
date-fns هي مكتبة مبنية على مبادئ البرمجة الوظيفية. تتكون من العديد من الدوال المستقلة، مما يسمح باستيراد ما تحتاجه فقط وعدم تضخيم الحزمة. تعمل مع كائنات Date الأصلية، مما يبسط التكامل.
الميزات الرئيسية:
- دوال نقية: كل دالة تُرجع كائنًا جديدًا دون تغيير الأصل.
- المعيارية: استيراد الدوال المطلوبة فقط (مثل
import { format, addDays } from 'date-fns'). - دعم اللغات المحلية: دعم مدمج لأكثر من 50 لغة، بما في ذلك العربية.
- TypeScript: توصيف ممتاز خارج الصندوق.
أمثلة كود مع date-fns
التثبيت:
npm install date-fnsتنسيق التاريخ:
import { format } from 'date-fns';import { ar } from 'date-fns/locale';
const date = new Date(2024, 11, 25); // 25 ديسمبر 2024const formatted = format(date, 'dd MMMM yyyy', { locale: ar });console.log(formatted); // "25 ديسمبر 2024"معالجة التواريخ:
import { addDays, subMonths, differenceInDays } from 'date-fns';
const today = new Date();const future = addDays(today, 10);const past = subMonths(today, 3);const diff = differenceInDays(future, past);console.log(`الفرق: ${diff} أيام`);مقارنة التواريخ:
import { isBefore, isAfter, isEqual } from 'date-fns';
const date1 = new Date(2024, 0, 1);const date2 = new Date(2024, 6, 1);console.log(isBefore(date1, date2)); // true2. Luxon — قوي وحديث
Luxon هي مكتبة من أحد مؤلفي Moment.js، تم إنشاؤها لحل عيوبها. تستخدم Luxon كائناتها غير القابلة للتغيير (DateTime و Duration) بدلاً من Date الأصلي. وهذا يجعلها مريحة بشكل خاص للعمل مع المناطق الزمنية والفترات الزمنية.
الميزات الرئيسية:
- عدم القابلية للتغيير: جميع الطرق تُرجع نسخًا جديدة.
- دعم مدمج للمناطق الزمنية: بدون إضافات إضافية.
- التدويل: الترجمة المحلية بناءً على Intl API.
- العمل مع الفترات الزمنية والمدد: طرق مريحة لحساب الفترات الزمنية.
أمثلة كود مع Luxon
التثبيت:
npm install luxonإنشاء وتنسيق التاريخ:
import { DateTime } from 'luxon';
const dt = DateTime.fromISO('2024-12-25', { zone: 'Europe/Moscow' });console.log(dt.toFormat('dd.MM.yyyy HH:mm')); // "25.12.2024 00:00"
// إخراج مترجم محليًاconsole.log(dt.setLocale('ar').toFormat('d MMMM yyyy')); // "25 ديسمبر 2024"العمل مع المناطق الزمنية:
const nyTime = DateTime.now().setZone('America/New_York');const moscowTime = nyTime.setZone('Europe/Moscow');console.log(`في نيويورك: ${nyTime.toFormat('HH:mm')}، في موسكو: ${moscowTime.toFormat('HH:mm')}`);المدد والفترات الزمنية:
import { Duration, Interval } from 'luxon';
const dur = Duration