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

Django模板中AJAX返回日期如何格式化为与{{date|timesince}}效果一致

解决方案

有两种常用实现思路,可根据你的业务场景选择:

方案1:后端预处理后返回(推荐,和Django原生效果完全一致)

直接在后端接口构造返回数据时,用Django自带的timesince过滤器处理日期字段,把格式化后的字符串直接返回给前端,不需要前端做额外处理。
示例代码(Django视图层):

from django.template.defaultfilters import timesince
from django.utils import timezone

# 构造返回数据时
message_data = {
    "date": your_date_object,
    # 直接把格式化好的timesince结果加进去
    "date_timesince": timesince(your_date_object, timezone.now()) + "前"
}

前端直接取这个字段使用即可:

var temp = "<p><b>" + response.messages[key].date_timesince + "</b><br></p>"

这个方案的优势是和Django模板里{{ date|timesince }}的输出效果100%一致,不需要额外处理时区、语言适配的问题。

方案2:前端JS实现timesince逻辑

如果你不方便修改后端接口,可以在前端写JS函数处理ISO格式的日期字符串,实现相同效果,示例函数如下:

function timesince(dateStr) {
    const date = new Date(dateStr);
    const now = new Date();
    const diffInSeconds = Math.floor((now - date) / 1000);
    
    const units = [
        {label: "年", seconds: 31536000},
        {label: "月", seconds: 2592000},
        {label: "周", seconds: 604800},
        {label: "天", seconds: 86400},
        {label: "小时", seconds: 3600},
        {label: "分钟", seconds: 60},
    ];
    
    for (let unit of units) {
        const count = Math.floor(diffInSeconds / unit.seconds);
        if (count > 0) {
            return `${count}${unit.label}前`;
        }
    }
    return "刚刚";
}

调用的时候直接传接口返回的日期字符串即可:

var temp = "<p><b>" + timesince(response.messages[key].date) + "</b><br></p>"

如果需要完全对齐Django的输出规则(比如超过1年显示年和月,小于1分钟显示0分钟),可以自行调整上面函数的判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:24:04