كم يوماً مضى؟ نحل المشكلة الأبدية في C#
\n\nتخيل: أنت تكتب تطبيقاً لإدارة الإجازات، أو مخطط مهام، أو تريد ببساطة معرفة عدد الأيام المتبقية حتى العام الجديد. وهنا يطرح السؤال الكلاسيكي: «كيفية حساب الفرق بين تاريخين في C#؟». هذا الاستعلام هو من أكثر الاستعلامات شيوعاً على Stack Overflow، وليس من دون سبب. التعامل مع التواريخ هو أساس يجب أن يعرفه كل مطور.
\n\nفي هذه المقالة، لن نقدم إجابة جافة فقط. سنشرح كل شيء بأمثلة حية، ونظهر المخاطر الخفية، ونعلمك كيفية الحصول على عدد الأيام (وليس فقط) بين أي لحظتين زمنيتين. هيا بنا!
\n\nأبسط طريقة: طرح تاريخ من آخر
\n\nفي C#، للتعامل مع التواريخ والوقت، توجد بنية قوية تسمى DateTime. السر الرئيسي هو أنه إذا طرحت كائن DateTime من آخر، فلن تحصل على رقم، بل على كائن خاص — TimeSpan. وهو الذي يخزن الفرق.
مثال أساسي: الفرق بالأيام بين تاريخين محددين
\n\nلنفترض أنك تريد معرفة عدد الأيام بين 1 مارس 2024 و10 مايو 2024.
\n\nusing System;\n\nclass Program\n{\n static void Main()\n {\n // إنشاء تاريخين\n DateTime startDate = new DateTime(2024, 3, 1);\n DateTime endDate = new DateTime(2024, 5, 10);\n\n // حساب الفرق\n TimeSpan difference = endDate - startDate;\n\n // الحصول على عدد الأيام الكاملة\n int days = difference.Days;\n\n Console.WriteLine($"الفرق بالأيام: {days}");\n // الإخراج: الفرق بالأيام: 70\n }\n}\n\n\nالأمر بسيط، أليس كذلك؟ العامل - مُعاد تعريفه لـ DateTime ويعيد TimeSpan. الخاصية .Days تعيد عدد الأيام الكاملة (بدون مراعاة الساعات والدقائق والثواني).
حساب الفرق مع «اليوم»
\n\nغالباً ما تحتاج إلى حساب عدد الأيام التي مضت منذ حدث معين حتى اللحظة الحالية. لهذا نستخدم DateTime.Now أو DateTime.Today.
DateTime today = DateTime.Today; // التاريخ فقط، الوقت 00:00\nDateTime someDay = new DateTime(2025, 1, 1); // 1 يناير 2025\n\nTimeSpan diff = someDay - today;\n\nConsole.WriteLine($"الأيام المتبقية حتى العام الجديد: {diff.Days} يوم");\n\n\nلاحظ: DateTime.Today يعيد التاريخ الحالي مع ضبط الوقت على 00:00:00. هذا مناسب إذا لم تكن الساعات والدقائق مهمة.
ماذا لو كنت بحاجة إلى أكثر من مجرد أيام؟
\n\nبنية TimeSpan ليست فقط .Days. لديها خصائص مفيدة أخرى قد تحتاجها إذا قررت توسيع الوظائف.
- \n
.Days— عدد الأيام الكاملة. \n .Hours— الساعات (من 0 إلى 23). \n .Minutes— الدقائق. \n .Seconds— الثواني. \n .TotalDays— إجمالي عدد الأيام كرقم عشري (مثلاً 70.5). \n .TotalHours— إجمالي عدد الساعات. \n
مثال مع TotalDays
\n\nتخيل أن الفرق بين التاريخين هو 36 ساعة بالضبط. الخاصية .Days ستظهر 1 (لأنه يوم كامل و12 ساعة). أما .TotalDays فستظهر 1.5.
DateTime start = new DateTime(2024, 1, 1, 0, 0, 0);\nDateTime end = new DateTime(2024, 1, 2, 12, 0, 0); // 1 يناير + يوم واحد و12 ساعة\n\nTimeSpan span = end - start;\n\nConsole.WriteLine($"الأيام (الكاملة): {span.Days}"); // 1\nConsole.WriteLine($"إجمالي الأيام: {span.TotalDays}"); // 1.5\n\n\nإذا كانت مهمتك هي معرفة عدد الأيام الكاملة فقط، استخدم .Days. إذا كنت بحاجة إلى قيمة دقيقة مع كسور، استخدم
المدونات
توصيات الكتب
اقرأ أيضًا