如何将后端返回的T格式JSON日期转为YYYY-MM-DD hh:mm am/pm格式展示?
日期格式转换实现方案
前端jQuery侧处理
不推荐靠纯字符串硬切割ISO时间字符串,带Z后缀的ISO时间是UTC标准格式,硬切割会丢失时区转换逻辑,可根据场景选择两种实现:
1. 带时区转换的稳定实现(推荐)
通过原生Date对象解析原始ISO字符串,自动转换为用户本地时区后做格式化,替换原遍历循环中的日期渲染逻辑:
$(data.datas).each(function(index,value){ // 解析原始时间字符串 const rawDate = new Date(value.create_date); // 拼接各时间字段,补前导零 const year = rawDate.getFullYear(); const month = String(rawDate.getMonth() + 1).padStart(2, '0'); const day = String(rawDate.getDate()).padStart(2, '0'); let hour = rawDate.getHours(); const minute = String(rawDate.getMinutes()).padStart(2, '0'); // 处理12小时制与am/pm标识 const ampm = hour >= 12 ? 'pm' : 'am'; hour = hour % 12; hour = hour ? hour : 12; // 处理0点显示为12点的逻辑 const formattedDate = `${year}-${month}-${day} ${String(hour).padStart(2, '0')}:${minute} ${ampm}`; // 拼接表格行时使用格式化后的日期 html += `<tr> <th scope="row">${index+1}</th> <td>${value.id}</td> <td>${formattedDate}</td> <td><a href="#" class="btn btn-outline-dark">View Car</a></td> </tr>` })
2. 纯字符串快速处理(适合无需时区转换的场景)
如果不需要把UTC时间转换为本地时区,可基于之前的split拆分思路补全逻辑:
// 在each循环内部 const [datePart, timePart] = value.create_date.split('T'); const [hourStr, minuteStr] = timePart.split(':'); let hour = parseInt(hourStr); const ampm = hour >= 12 ? 'pm' : 'am'; hour = hour % 12 || 12; const formattedDate = `${datePart} ${String(hour).padStart(2, '0')}:${minuteStr} ${ampm}`;
Django后端侧处理
直接在后端接口返回数据前完成格式化,前端无需额外写转换逻辑,从根源上减少多端格式不统一的问题。
1. DRF序列化器场景
重写日期字段的输出格式:
from rest_framework import serializers from .models import Car class CarSerializer(serializers.ModelSerializer): # 按目标格式输出create_date create_date = serializers.DateTimeField(format="%Y-%m-%d %I:%M %p") class Meta: model = Car fields = ['id', 'create_date']
其中格式符对应规则:
%Y-%m-%d输出年-月-日结构%I输出12小时制的带前导零的小时数%M输出带前导零的分钟数%p输出am/pm标识
2. 原生Django视图场景
在构造返回JSON时直接用strftime格式化时间:
from django.http import JsonResponse from .models import Car def get_car_list(request): car_list = [] for car in Car.objects.all(): car_list.append({ "id": car.id, "create_date": car.create_date.strftime("%Y-%m-%d %I:%M %p") }) return JsonResponse({"datas": car_list})
内容的提问来源于stack exchange,提问作者Swati
相关产品推荐
相关产品推荐

