From 92802d0da06618e19332d46fab2ccf1dfc4afd57 Mon Sep 17 00:00:00 2001 From: "soroush.asadi" Date: Sun, 21 Jun 2026 19:35:30 +0330 Subject: [PATCH] Show a Persian added-X-ago timestamp on listing cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add JalaliDate.TimeAgo(utc) returning «همین حالا»/«۲ ساعت پیش»/«۳ روز پیش»/«۲ هفته پیش»/«۴ ماه پیش»/«۱ سال پیش», and display it (🕒) on the talent, job, and shift cards from their CreatedAt so users can see how recent each listing is. Co-Authored-By: Claude Opus 4.8 --- .../Pages/Shared/_JobCard.cshtml | 1 + .../Pages/Shared/_ShiftCard.cshtml | 1 + .../Pages/Shared/_TalentCard.cshtml | 1 + src/JobsMedical.Web/Services/JalaliDate.cs | 18 ++++++++++++++++++ 4 files changed, 21 insertions(+) diff --git a/src/JobsMedical.Web/Pages/Shared/_JobCard.cshtml b/src/JobsMedical.Web/Pages/Shared/_JobCard.cshtml index 4d14bc2..7647acd 100644 --- a/src/JobsMedical.Web/Pages/Shared/_JobCard.cshtml +++ b/src/JobsMedical.Web/Pages/Shared/_JobCard.cshtml @@ -42,6 +42,7 @@ {
@snip
} +
🕒 @JalaliDate.TimeAgo(Model.CreatedAt)
@salary جزئیات diff --git a/src/JobsMedical.Web/Pages/Shared/_ShiftCard.cshtml b/src/JobsMedical.Web/Pages/Shared/_ShiftCard.cshtml index 06430c4..c58a8f1 100644 --- a/src/JobsMedical.Web/Pages/Shared/_ShiftCard.cshtml +++ b/src/JobsMedical.Web/Pages/Shared/_ShiftCard.cshtml @@ -41,6 +41,7 @@
@snip
} +
🕒 @JalaliDate.TimeAgo(Model.CreatedAt)
@JalaliDate.PayLabel(Model.PayType, Model.PayAmount, Model.SharePercent) جزئیات diff --git a/src/JobsMedical.Web/Pages/Shared/_TalentCard.cshtml b/src/JobsMedical.Web/Pages/Shared/_TalentCard.cshtml index 2bd4b3d..907db37 100644 --- a/src/JobsMedical.Web/Pages/Shared/_TalentCard.cshtml +++ b/src/JobsMedical.Web/Pages/Shared/_TalentCard.cshtml @@ -54,6 +54,7 @@ }
} +
🕒 @JalaliDate.TimeAgo(Model.CreatedAt)
@comp مشاهده و تماس diff --git a/src/JobsMedical.Web/Services/JalaliDate.cs b/src/JobsMedical.Web/Services/JalaliDate.cs index adbff1a..751e229 100644 --- a/src/JobsMedical.Web/Services/JalaliDate.cs +++ b/src/JobsMedical.Web/Services/JalaliDate.cs @@ -30,6 +30,24 @@ public static class JalaliDate /// needs no timezone database. public static DateTime ToTehran(DateTime utc) => utc.AddMinutes(210); + /// Relative "added X ago" in Persian from a UTC timestamp: «همین حالا»، «۵ دقیقه پیش»، + /// «۲ ساعت پیش»، «۳ روز پیش»، «۲ هفته پیش»، «۴ ماه پیش»، «۱ سال پیش». + public static string TimeAgo(DateTime utc) + { + var span = DateTime.UtcNow - utc; + if (span < TimeSpan.Zero) span = TimeSpan.Zero; + var mins = (int)span.TotalMinutes; + if (mins < 1) return "همین حالا"; + if (mins < 60) return ToPersianDigits(mins.ToString()) + " دقیقه پیش"; + var hours = (int)span.TotalHours; + if (hours < 24) return ToPersianDigits(hours.ToString()) + " ساعت پیش"; + var days = (int)span.TotalDays; + if (days < 7) return ToPersianDigits(days.ToString()) + " روز پیش"; + if (days < 30) return ToPersianDigits((days / 7).ToString()) + " هفته پیش"; + if (days < 365) return ToPersianDigits((days / 30).ToString()) + " ماه پیش"; + return ToPersianDigits((days / 365).ToString()) + " سال پیش"; + } + /// Jalali date + Tehran time, e.g. «۳۰ خرداد ۱۴۰۵ ۱۶:۲۱» — for UTC-stored timestamps. public static string DateTimeLabel(DateTime utc) {