السلام عليكم ورحمة الله وبركاته
استخدم الكود التالى فى الحصول على ناتج فرق التوقيت الأول من الثانى
// ساعات العمل الواجبة
string must_work = "06:00";
// الحصول على عدد ساعات العمل خلال اليوم
DateTime startTime = DateTime.Parse("11/08/2013 08:00 AM");
DateTime endTime = DateTime.Parse("11/08/2013 05:00 PM");
TimeSpan ts = endTime.Subtract(startTime);
string work_day_hours = String.Format("{0:00}:{1:00}", ts.Hours, ts.Minutes);
// إذا كان عدد ساعات العمل خلال اليوم أكبر من عدد ساعات العمل اليومية للموظف
if (Convert.ToDateTime(work_day_hours) > Convert.ToDateTime(must_work))
{
// حساب الفرق بين إجمالى عدد ساعات اليوم والساعات الفعلية للموظف
DateTime work_day_hours_dt = Convert.ToDateTime(work_day_hours);
DateTime must_work_dt = Convert.ToDateTime(must_work);
TimeSpan t = work_day_hours_dt.Subtract(must_work_dt);
string diff = String.Format("{0:00}:{1:00}", t.Hours, t.Minutes);
DateTime diff_hours_dt = Convert.ToDateTime(diff);
TimeSpan diff_hours = new TimeSpan(diff_hours_dt.Hour, diff_hours_dt.Minute, diff_hours_dt.Second);
// تحويل وقت الإنصراف للصيغة الصحيحة قبل الطرح
TimeSpan end_time_span = new TimeSpan(endTime.Hour, endTime.Minute, endTime.Second);
// طرح عدد الساعات الزيادة من وقت الإنصراف
TimeSpan time_diff_final = end_time_span.Subtract(diff_hours);
time_diff_final = diff_hours.Subtract(end_time_span);
// وقت الإنصراف الجديد
string diff_f = String.Format("{0:00}:{1:00}:{2:00}", time_diff_final.Hours, time_diff_final.Minutes, time_diff_final.Seconds);
DateTime new_end_time = Convert.ToDateTime(diff_f);
string xx = new_end_time.ToString("hh:mm tt");الكود السابق يعمل بشكل سليم اذا كان الوقت الثانى وهو وقت الإنصراف PM فقط ولكن صادفتنى حالة شاذة حيث ان هذا المشروع خاص بمستشفى ومن الممكن ان يحضر الطبيب او المساعد فى موعده صباحا AM ولكن ينصرف AM فى اليوم التالى بحيث يكون الوقتين بهذا الشكل وكما تلاحظون ان الحضور فى يوم 11/08/2013 والإنصراف فى يوم أخر 12/08/2013
DateTime startTime = DateTime.Parse("11/08/2013 08:00 AM");
DateTime endTime = DateTime.Parse("12/08/2013 05:00 AM");وحسب المطلوب منى وهو حساب الساعات الزائدة عن مواعيد عمله الفعليه والمسجلة بقاعدة البيانات اقوم بإستخراج الفرق وطرح من ساعة الإنصراف لكى أقوم بتسجيل موعد الإنصراف الصحيح والفارق اقوم بوضعه فى عمود أخر كساعات عمل إضافية
بمعنى الأتى:
احمد يعمل عدد ( 6 ساعات يوميا )
موعد الحضور الذى تم تسجيلة ( 08:00 ص )
موعد الانصراف الذى تم تسجيله ( 04:00 م )
فرق عدد الساعات = ( الانصراف - الحضور ) - 6 ساعات يوميا = 2 ساعتين
هنا اقوم بطرح ساعتين من وقت الانصراف ليصبح الوقت الجديد = ( 02:00 م )
اقوم بتخزين ( ساعتين فرق ) فى عمود اخر
ولكن عند الإنصراف AM فى اليوم التالى وهو حالة شاذة يحدث خلل هنا تحديد
TimeSpan time_diff_final = end_time_span.Subtract(diff_hours);
حيث يظهر الفارق بالسالب وبالتالى لا استطيع حساب الوقت الجديد للإنصراف وان قمت بتبديل end_time_span مكان diff_hours سوف يظهر السالب لى فى حالة الانصراف PM والتى ليس بها مشكلة حاليا ؟؟؟