You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询:是否有函数可将日期差格式化为友好文本?(.NET 18.4、SQL)

.NET 与 SQL 环境下日期差转友好文本的实现方案

.NET 环境(注:你提到的 .NET 18.4 应为笔误,当前主流稳定版本为 .NET 8/.NET 9)

.NET 标准库中没有直接输出“几小时前”“昨天”这类人性化文本的内置 DateTime 函数,但有两种实用的实现方式:

1. 借助第三方库(Humanizer)

这是最省心的方案,Humanizer 专门处理这类文本转换,支持多语言:

// 先通过 NuGet 安装 Humanizer 包
var targetDate = new DateTime(2024, 5, 20, 10, 0, 0);
var friendlyText = targetDate.Humanize();
// 中文环境下会自动输出类似 "3天前" 的结果

2. 手动编写逻辑

如果不想引入外部依赖,可通过计算时间差自行判断输出:

public static string GetFriendlyTime(DateTime pastDate)
{
    var timeSpan = DateTime.Now - pastDate;

    if (timeSpan.TotalSeconds < 60)
        return "刚刚";
    if (timeSpan.TotalMinutes < 60)
        return $"{(int)timeSpan.TotalMinutes}分钟前";
    if (timeSpan.TotalHours < 24)
        return $"{(int)timeSpan.TotalHours}小时前";
    if (timeSpan.TotalDays < 2)
        return "昨天";
    if (timeSpan.TotalDays < 30)
        return $"{(int)timeSpan.TotalDays}天前";
    if (timeSpan.TotalDays < 365)
        return $"{(int)timeSpan.TotalDays / 30}个月前";
    return $"{(int)timeSpan.TotalDays / 365}年前";
}

SQL 环境(以 SQL Server 为例)

SQL Server 没有内置的友好日期差函数,需要自定义标量函数来实现:

CREATE FUNCTION dbo.GetFriendlyDateDiff(@PastDate DATETIME)
RETURNS NVARCHAR(50)
AS
BEGIN
    DECLARE @DiffSec INT = DATEDIFF(SECOND, @PastDate, GETDATE())
    DECLARE @DiffMin INT = @DiffSec / 60
    DECLARE @DiffHour INT = @DiffMin / 60
    DECLARE @DiffDay INT = @DiffHour / 24

    IF @DiffSec < 60
        RETURN N'刚刚'
    IF @DiffMin < 60
        RETURN CAST(@DiffMin AS NVARCHAR) + N'分钟前'
    IF @DiffHour < 24
        RETURN CAST(@DiffHour AS NVARCHAR) + N'小时前'
    IF @DiffDay < 2
        RETURN N'昨天'
    IF @DiffDay < 30
        RETURN CAST(@DiffDay AS NVARCHAR) + N'天前'
    IF @DiffDay < 365
        RETURN CAST(@DiffDay / 30 AS NVARCHAR) + N'个月前'
    RETURN CAST(@DiffDay / 365 AS NVARCHAR) + N'年前'
END

调用示例:

SELECT dbo.GetFriendlyDateDiff('2024-05-20 10:00:00') AS FriendlyTime

内容的提问来源于stack exchange,提问作者Esteban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:15:22