🕰️ التعامل مع التاريخ والوقت في Dart
✅ ما هو الكلاس المسؤول عن الوقت والتاريخ؟
Dart توفر كلاس جاهز اسمه DateTime
يمثل الوقت والتاريخ.
✅ إنشاء كائن DateTime
🧪 1. الحصول على الوقت الحالي:
void main() {
DateTime now = DateTime.now();
print("🕒 الآن: $now");
}
Dart🟡 النتيجة:
🕒 الآن: 2025-07-08 08:20:53.123
Dart🧪 2. إنشاء تاريخ ووقت يدويًا:
void main() {
DateTime birthday = DateTime(1995, 6, 15);
print("🎂 تاريخ الميلاد: $birthday");
}
Dart📌 الصيغة:
DateTime(year, month, day, hour, minute, second, millisecond)
Dart🧪 3. إنشاء من نص (String):
void main() {
DateTime d = DateTime.parse("2023-12-31 23:59:00");
print("📅 من نص: $d");
}
Dart⚠️ يجب أن يكون التنسيق متوافق مع ISO8601
✅ قراءة أجزاء من التاريخ:
void main() {
DateTime now = DateTime.now();
print("📆 السنة: ${now.year}");
print("📅 الشهر: ${now.month}");
print("📅 اليوم: ${now.day}");
print("⏰ الساعة: ${now.hour}");
print("⏱️ الدقيقة: ${now.minute}");
print("⏱️ الثانية: ${now.second}");
}
Dart✅ تعديل أو إضافة وقت:
🧪 1. استخدام add()
لإضافة وقت:
void main() {
DateTime now = DateTime.now();
DateTime nextWeek = now.add(Duration(days: 7));
print("📆 بعد أسبوع: $nextWeek");
}
Dart🧪 2. استخدام subtract()
لطرح وقت:
void main() {
DateTime now = DateTime.now();
DateTime yesterday = now.subtract(Duration(days: 1));
print("📆 أمس: $yesterday");
}
Dart✅ الفرق بين تاريخين:
void main() {
DateTime start = DateTime(2024, 1, 1);
DateTime end = DateTime(2024, 1, 15);
Duration diff = end.difference(start);
print("🧮 الفرق بالأيام: ${diff.inDays}");
}
Dart✅ تنسيق التاريخ (يدويًا):
void main() {
DateTime now = DateTime.now();
print("${now.day}-${now.month}-${now.year}");
}
Dart🔸 أو باستخدام مكتبة خارجية مثل intl
لتنسيقات متقدمة.
✅ مقارنة التواريخ:
void main() {
DateTime d1 = DateTime(2024, 5, 10);
DateTime d2 = DateTime(2024, 5, 12);
print(d1.isBefore(d2)); // true
print(d1.isAfter(d2)); // false
}
Dart✅ مثال تطبيقي كامل: حساب العمر
void main() {
DateTime birthDate = DateTime(2000, 7, 1);
DateTime today = DateTime.now();
int age = today.year - birthDate.year;
if (today.month < birthDate.month ||
(today.month == birthDate.month && today.day < birthDate.day)) {
age--;
}
print("🎉 عمرك هو: $age سنة");
}
Dart✅ خلاصة:
الدالة / الخاصية | وظيفتها |
---|---|
DateTime.now() | الوقت الحالي |
DateTime.parse() | تحويل نص إلى تاريخ |
DateTime(year, month, day) | إنشاء يدوي |
add(Duration) | إضافة وقت |
subtract(Duration) | طرح وقت |
difference(DateTime) | حساب الفرق |
isBefore / isAfter | المقارنة بين تواريخ |
year, month, day... | قراءة عناصر التاريخ |
✅ أمثلة وأفكار حقيقية متنوعة باستخدام DateTime
🟡 1. 💡 عداد الأيام المتبقية لموعد
void main() {
DateTime deadline = DateTime(2025, 8, 1);
DateTime today = DateTime.now();
Duration remaining = deadline.difference(today);
print("⏳ الأيام المتبقية: ${remaining.inDays}");
}
Dart🟢 مثال عملي: عداد لانتهاء التقديم على منحة أو مسابقة.
🟡 2. 💡 التحقق هل الوقت الحالي صباح أو مساء
void main() {
DateTime now = DateTime.now();
if (now.hour < 12) {
print("☀️ صباح الخير");
} else {
print("🌙 مساء الخير");
}
}
Dart🟢 مثال عملي: تغيير تحية الواجهة حسب الوقت.
🟡 3. 💡 عرض توقيت آخر نشاط للمستخدم
void main() {
DateTime lastSeen = DateTime.now().subtract(Duration(minutes: 20));
print("📱 آخر ظهور قبل ${lastSeen.difference(DateTime.now()).inMinutes.abs()} دقيقة");
}
Dart🟢 مثال: تطبيقات الدردشة مثل WhatsApp.
🟡 4. 💡 حساب الاشتراك الشهري
void main() {
DateTime start = DateTime(2025, 6, 10);
DateTime now = DateTime.now();
int months = (now.year - start.year) * 12 + (now.month - start.month);
print("🧾 عدد الشهور منذ الاشتراك: $months");
}
Dart🟢 مثال: منصة تعليمية لحساب مدة اشتراك الطالب.
🟡 5. 💡 معرفة اليوم من الأسبوع
void main() {
DateTime now = DateTime.now();
print("📅 اليوم هو: ${now.weekday}"); // 1 = الاثنين
}
Dart🟢 مثال: جدولة المهام حسب اليوم.
يمكنك ربط الأيام بالأسماء:
const days = {
1: 'الاثنين',
2: 'الثلاثاء',
3: 'الأربعاء',
4: 'الخميس',
5: 'الجمعة',
6: 'السبت',
7: 'الأحد',
};
Dart🟡 6. 💡 تسجيل وقت دخول المستخدم
void main() {
DateTime loginTime = DateTime.now();
print("✅ تم تسجيل الدخول في: $loginTime");
}
Dart🟢 مثال: لوحة تحكم تسجيل الدخول.
🟡 7. 💡 تأخير تنفيذ أمر بعد وقت
import 'dart:async';
void main() {
print("⌛ الانتظار 3 ثوانٍ...");
Future.delayed(Duration(seconds: 3), () {
print("⏰ انتهى الانتظار!");
});
}
Dart🟢 مثال: عرض شاشة تحميل مؤقتة.
🟡 8. 💡 توليد تاريخ صلاحية بعد 30 يوم
void main() {
DateTime now = DateTime.now();
DateTime expiry = now.add(Duration(days: 30));
print("🗓️ تاريخ انتهاء الصلاحية: $expiry");
}
Dart🟢 مثال: صلاحية كلمة المرور أو اشتراك.
🧠 فقرات إضافية مهمة يجب معرفتها في DateTime
✅ Duration
– مدة زمنية
Duration d = Duration(days: 2, hours: 3);
print("⏳ عدد الساعات الكلية: ${d.inHours}"); // 51
Dart✅ تنسيقات تاريخ مخصصة باستخدام intl
import 'package:intl/intl.dart';
void main() {
DateTime now = DateTime.now();
String formatted = DateFormat('dd/MM/yyyy – hh:mm a').format(now);
print("📅 التاريخ المنسق: $formatted");
}
Dart🟢 النتيجة: 08/07/2025 – 10:32 AM
🟢 مفيد جدًا لعرض التاريخ بشكل مخصص للمستخدم.
✅ تحويل DateTime
إلى نص والعكس
// تحويل التاريخ إلى نص
String dateStr = DateTime.now().toIso8601String();
// تحويل النص إلى تاريخ
DateTime d = DateTime.parse(dateStr);
Dart✅ الثبات (Immutable)
DateTime
في Dart كائن ثابت، أي عند تعديل التاريخ يتم إنشاء كائن جديد، وليس تعديل الموجود.
✅ المقارنة بين تواريخ:
DateTime d1 = DateTime(2025, 5, 10);
DateTime d2 = DateTime(2025, 5, 15);
if (d2.isAfter(d1)) print("✅ الموعد لاحق");
Dart✅ التحقق من نفس اليوم:
bool isSameDay(DateTime d1, DateTime d2) {
return d1.year == d2.year &&
d1.month == d2.month &&
d1.day == d2.day;
}
Dart✅ الخلاصة:
النقطة | الأهمية |
---|---|
DateTime | يمثل تاريخ ووقت |
Duration | يمثل مدة زمنية |
now() | الوقت الحالي |
add() / subtract() | لتعديل الوقت |
difference() | لمعرفة الفرق بين تاريخين |
intl | مكتبة لتنسيقات متقدمة |
isBefore / isAfter | للمقارنة |
parse() / toString() | تحويل بين نص وتاريخ |
✅ 1. مثال عداد تنازلي حقيقي (Countdown Timer)
🎯 الفكرة:
نعرض الوقت المتبقي حتى تاريخ مستقبلي (مثل بداية حدث أو انتهاء عرض).
import 'dart:async';
void main() {
DateTime targetDate = DateTime.now().add(Duration(seconds: 10));
Timer.periodic(Duration(seconds: 1), (timer) {
Duration diff = targetDate.difference(DateTime.now());
if (diff.inSeconds <= 0) {
print("🎉 انتهى العداد!");
timer.cancel();
} else {
print("⏳ تبقى: ${diff.inSeconds} ثانية");
}
});
}
Dart🟢 النتيجة (مثال):
⏳ تبقى: 10 ثانية
⏳ تبقى: 9 ثانية
...
🎉 انتهى العداد!
Dart🟢 يمكنك تطويره ليعرض بالساعات والدقائق أيضًا.
✅ 2. جدول مهام الأسبوع
🎯 الفكرة:
كل يوم من الأسبوع له مهمة خاصة.
void main() {
Map<int, String> tasks = {
1: "📘 دراسة Dart",
2: "📗 بناء مشروع",
3: "🛠️ مراجعة الكود",
4: "💡 تعلم Flutter",
5: "📊 تحليل الأداء",
6: "🧘 راحة",
7: "🧼 تنظيف الجهاز"
};
DateTime today = DateTime.now();
String task = tasks[today.weekday] ?? "📝 لا توجد مهام";
print("📅 مهمة اليوم: $task");
}
Dart🟢 النتيجة:
📅 مهمة اليوم: 📘 دراسة Dart
Dart✅ أفكار إضافية متقدمة يمكنك تنفيذها:
الفكرة | الوصف |
---|---|
🔔 تذكير بالمهام | إرسال إشعار عندما يحين وقت المهمة |
⌛ مؤقت جلسة | عداد تنازلي لكل جلسة دراسة أو عمل |
🔁 حساب دورية المهام | هل مر 7 أيام؟ 30 يوم؟ – لتكرار المهام |
🧾 سجل دخول المستخدمين | حفظ التاريخ عند كل دخول |
⌚ مقارنة وقت الحدث الحالي بوقت النهاية | لتنبيه المستخدم عند انتهاء وقته |