最近在寫一些東西,但是常常設計那邊要出現的時間,不是 yyyy-MM-dd HH:mm 而是要 剛剛、分鐘前、小時前、天前、周前、個月前、年前、分鐘後、小時後、天後、周後、年後 這類的東西,所以就順手寫一個
不知道有沒有 bug 就姑且用吧 :)

C# Code:
private string GetTimeString(DateTime dateTime) {
var now = DateTime.Now;
if (dateTime == now) { return "現在"; };
var t1 = now;
var t2 = now;
var tmp = "";
if (dateTime > now)
{
t2 = dateTime;
tmp = "後";
}
else {
t1 = dateTime;
tmp = "前";
}
var ts = t2 - t1;
if (ts.TotalDays >= 365) {
return Math.Floor(ts.TotalDays/365) + "年" + tmp;
}
if ( (ts.TotalDays /31) >1) {
return Math.Floor(ts.TotalDays / 31) + "個月" + tmp;
}
if (ts.TotalDays>=1)
{
return Math.Floor(ts.TotalDays) + "天" + tmp;
}
if (ts.TotalHours >= 1)
{
return Math.Floor(ts.TotalHours) + "小時" + tmp;
}
if (ts.TotalMinutes >= 1)
{
return Math.Floor(ts.TotalMinutes) + "分鐘" + tmp;
}
if (ts.Seconds >= 1)
{
return Math.Floor(ts.TotalSeconds) + "秒" + tmp;
}
return "剛剛";
}
需要的就自行取用吧,不贅述了...
後記,現在是 2023 我問了 ChatGPT ,他給了其他解法
code:
using System;
public static class DateTimeExtensions
{
public static string ToHumanReadableString(this DateTime dt)
{
TimeSpan timeSince = DateTime.Now.Subtract(dt);
if (timeSince.TotalMilliseconds < 1) return "剛剛";
if (timeSince.TotalMinutes < 1) return "剛剛";
if (timeSince.TotalMinutes < 2) return "1 分鐘前";
if (timeSince.TotalMinutes < 60) return string.Format("{0} 分鐘前", (int)timeSince.TotalMinutes);
if (timeSince.TotalMinutes < 120) return "1 小時前";
if (timeSince.TotalHours < 24) return string.Format("{0} 小時前", (int)timeSince.TotalHours);
if (timeSince.TotalDays == 1) return "昨天";
if (timeSince.TotalDays < 7) return string.Format("{0} 天前", (int)timeSince.TotalDays);
if (timeSince.TotalDays < 14) return "上週";
if (timeSince.TotalDays < 21) return "2 周前";
if (timeSince.TotalDays < 28) return "3 周前";
if (timeSince.TotalDays < 60) return "上個月";
if (timeSince.TotalDays < 365) return string.Format("{0} 個月前", (int)(timeSince.TotalDays / 30));
if (timeSince.TotalDays < 730) return "去年";
return string.Format("{0} 年前", (int)(timeSince.TotalDays / 365));
}
}
強大阿