• 0

كيف أحسب الزمن النسبي 'Relative Time' على #C؟

على تطبيق لي بـ #C أريد حساب الزمن النسبي المنُنقضي انطلاقا من متغير datetime، مثال:

  •     منذ ساعتين.
  •     منذ 3أيام وساعات.
  •     منذ شهر واحد.

كيف أحصل على نفس النتيجة انطلاقا من متغير الوقت؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

الطريقة الفعالة لفعل ذلك وهي بحساب المدة الزمنية المُنقضية منذ وقت النشر إلى الآن، ووضع عدة  معايير للتحكم في الشكل النهائي الظاهر على شاشة المستخدم، مثلا عند انقاء 24 ساعة نكتب منذ يوم، بعد 60 دقيقة  أي منذ ساعة وهكذا...

// تعريف متغيرات الزمن دقيقة، ساعة، يوم...
const int SECOND = 1;
const int MINUTE = 60 * SECOND;
const int HOUR = 60 * MINUTE;
const int DAY = 24 * HOUR;
const int MONTH = 30 * DAY;

// حساب المدة المنقضية ووضعها في متغير
var ts = new TimeSpan(DateTime.UtcNow.Ticks - yourDate.Ticks);
double delta = Math.Abs(ts.TotalSeconds);
//If التأكد من قيمة المدةالمُنقضية عن طريق دالة
if (delta < 1 * MINUTE)
{
  return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " منذ ثانية";
}
if (delta < 2 * MINUTE)
{
  return "منذ دقيقة";
}
if (delta < 45 * MINUTE)
{
  return ts.Minutes + " منذ دقائق";
}
if (delta < 90 * MINUTE)
{
  return "منذ ساعة";
}
if (delta < 24 * HOUR)
{
  return ts.Hours + " ساعة";
}
if (delta < 48 * HOUR)
{
  return "الأمس";
}
if (delta < 30 * DAY)
{
  return ts.Days + " يوم";
}
if (delta < 12 * MONTH)
{
  int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
  return months <= 1 ? "one month ago" : شهر+ " months ago";
}
else
{
  int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
  return years <= 1 ? "one year ago" : years + " years ago";
}

الأمر غير معقد، فقط يحتاج إلى بعض التركيز- وقد أرفقت المثال بالتعليقات ليسهل فهمه- .

تمّ تعديل بواسطة E.Nourddine

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن