Date And Time In Dart

🕰️ التعامل مع التاريخ والوقت في 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 يوم؟ – لتكرار المهام
🧾 سجل دخول المستخدمينحفظ التاريخ عند كل دخول
⌚ مقارنة وقت الحدث الحالي بوقت النهايةلتنبيه المستخدم عند انتهاء وقته