حتما در سایت جاری مشاهده کرده اید در اطلاعات مربوط به پستها زمان تقریبی انتشار پست درج شده است.
- 12 ساعت قبل
- دیروز
- لحظاتی پیش
- ...
نشان دادن همچین اطلاعاتی در برنامههای مختلف میتواند سودمند باشد ، مثلا در این سایت اگر مطلبی مربوط به گذشته باشد خواننده با دیدن عبارت 4 سال قبل از پرسیدن یک سری سوالات خودداری میکند.
آقای Jeff Awtood یکی از خالقین سایت Stackoverflow زمانی سوالی دربارهی نحوهی پیاده سازی این ویژگی پرسیده بودند که در نهایت یکی از پاسخ ها پذیرفته شد.
یک مثال از نحوهی پیاده سازی این ویژگی برای زبان فارسی مانند زیر است :
public class RelativeTimeCalculator { const int SECOND = 1; const int MINUTE = 60 * SECOND; const int HOUR = 60 * MINUTE; const int DAY = 24 * HOUR; const int MONTH = 30 * DAY; public static string Calculate(DateTime dateTime) { var ts = new TimeSpan(DateTime.Now.Ticks - dateTime.Ticks); double delta = Math.Abs(ts.TotalSeconds); if (delta < 1 * MINUTE) { return ts.Seconds == 1 ? "لحظه ای قبل" : 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 ? "یک ماه قبل" : months + " ماه قبل"; } int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365)); return years <= 1 ? "یک سال قبل" : years + " سال قبل"; } }
نحوهی کارکرد کد اینگونه است که دلتای زمان داده شده به متد Calculate با زمان فعلی بر حسب ثانیه محاسبه میگردد و با یک سری شرط مقایسه میشود ، مثلا اگر دلتا کمتر از 120 ثانیه بود رشتهی یک دقیقه قبل باز میگردد.
یک مثال از نحوهی استفاده از این کلاس اینگونه است :
var relativeTime=RelativeTimeCalculator.Calculate(DateTime.Now.AddMinutes(-10));