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

如何通过Ajax在HTML中修改Django DateTimeField对象的显示格式?

解决Django中日期时间格式化显示问题

你尝试在models.py中用strftime修改日期格式出错,原因是DateTimeField字段需要存储datetime类型对象,不能直接用strftime生成的字符串作为字段值或默认值。下面提供两种靠谱的解决思路:

方案一:后端视图层格式化日期

在返回JsonResponse前,手动遍历查询结果,将日期格式化为目标字符串:

修改views.py的代码:

from django.http import JsonResponse
from datetime import datetime
from .models import Log

def backlog_list(request): 
    account_name = request.POST['account_name']
    access_log = Log.objects.filter(source=account_name)
    formatted_logs = []
    for log in access_log:
        # 用strftime生成目标格式,替换默认的am/pm为要求的A.M./P.M.
        formatted_date = log.date.strftime("%b. %d, %Y, %I:%M:%S %p").replace("am", "A.M.").replace("pm", "P.M.")
        formatted_logs.append({
            "id": log.id,
            "source": log.source,
            "date": formatted_date
        })
    return JsonResponse({"access_log": formatted_logs})

格式符说明:

  • %b:缩写月份(如Jan)
  • %d:两位数字日期
  • %Y:四位年份
  • %I:12小时制的小时数
  • %M:两位数字分钟
  • %S:两位数字秒数
  • %p:本地AM/PM标识,手动替换为目标格式

方案二:前端JavaScript格式化日期

如果不想改动后端,也可以在前端接收ISO日期字符串后,用JS处理成目标格式:

修改dashboard.html中的AJAX success回调:

success: function(response){
    console.log(response);
    $("#display").empty();
    
    // 自定义日期格式化函数
    function formatDateTime(isoStr) {
        const date = new Date(isoStr);
        const monthNames = ['Jan.', 'Feb.', 'Mar.', 'Apr.', 'May.', 'Jun.', 
                           'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.'];
        const month = monthNames[date.getMonth()];
        const day = date.getDate();
        const year = date.getFullYear();
        
        let hours = date.getHours();
        const period = hours >= 12 ? 'P.M.' : 'A.M.';
        // 转换为12小时制,0点转为12
        hours = hours % 12 || 12;
        // 补零处理分钟和秒
        const minutes = String(date.getMinutes()).padStart(2, '0');
        const seconds = String(date.getSeconds()).padStart(2, '0');
        
        return `${month} ${day}, ${year}, ${hours}:${minutes}:${seconds} ${period}`;
    }

    for (var key in response.access_log)
    {
        const formattedDate = formatDateTime(response.access_log[key].date);
        var temp="<div class='container darker'><span class='time-left'>"+formattedDate+"</span></div>";
        $("#display").append(temp);
    }
},

为什么models层修改会出错?

models.DateTimeField的default参数需要传入可调用的datetime生成函数(如datetime.now),如果直接用datetime.now().strftime(...),会在模型加载时就生成固定字符串,而非每次创建对象时生成新的datetime,同时数据库无法将字符串存入DateTime类型字段,因此触发错误。日期格式的处理应放在数据输出阶段,而非存储阶段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:50:46