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

如何通过REST客户端获取YYYY-MM-DD格式的数据库查询日期?

解决REST API返回Unix时间戳而非YYYY-MM-DD格式日期的问题

我来帮你梳理下这个问题的解决思路,你遇到的情况其实很常见——数据库里已经能拿到正确的YYYY-MM-DD格式日期,但通过REST API返回就变成了Unix时间戳,核心问题出在数据从服务端序列化到客户端的环节,下面给你几个可行的方案:

方案一:直接在SQL查询中格式化字符串(最省心的方案)

既然数据库已经能把created_date转成DATE类型,不如一步到位在SQL里把它转成固定格式的字符串,这样API返回的就是纯文本,完全不会被序列化工具转成时间戳:

SELECT TO_CHAR(created_date::DATE, 'YYYY-MM-DD') AS "Date" FROM myTable;

执行这个查询后,API返回的Date字段直接就是2018-02-23格式的字符串,不需要再处理序列化规则。

方案二:在API服务层配置日期序列化规则(适合全局统一格式)

如果你的API需要统一处理所有日期字段的返回格式,可以在服务端的序列化配置里做调整,这里举几个常见框架的例子:

如果你用Java/Spring Boot

如果项目用Jackson做序列化,可以在实体类的对应日期字段上添加注解,指定返回格式:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private LocalDate date;

也可以通过全局配置类,统一设置所有日期类型的序列化规则,避免每个字段单独加注解。

如果你用Node.js/Express

如果用原生JSON.stringify处理响应,可以自定义replacer函数来转换日期格式:

res.json(data, (key, value) => {
  if (value instanceof Date) {
    // 提取ISO字符串中的YYYY-MM-DD部分
    return value.toISOString().split('T')[0];
  }
  return value;
});

或者用moment.js、date-fns这类日期库来更灵活地格式化:

const dateFns = require('date-fns');
// 假设data里的date字段是Date类型
data.date = dateFns.format(data.date, 'yyyy-MM-dd');
res.json(data);

方案三:在REST客户端层面转换(临时应急方案)

如果暂时没法修改API或数据库查询,也可以在Postman这类客户端里用脚本把时间戳转成目标格式。比如在Postman的Tests标签里添加这段代码:

// 假设响应体中的Date字段是时间戳1519344000000
const response = pm.response.json();
const timestamp = response.Date;
const date = new Date(timestamp);
const formattedDate = `${date.getFullYear()}-${String(date.getMonth()+1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
// 可以把格式化后的值替换回响应体,或者打印查看
response.Date = formattedDate;
pm.response.json(response);

问题根源说明

你在数据库里查询能得到正确的YYYY-MM-DD格式,是因为数据库直接返回了DATE类型的字符串表示;但API服务在把这个DATE类型数据返回给客户端时,默认的序列化工具(比如Jackson、JSON.stringify)会把日期类型转成Unix时间戳或者带时分秒的ISO格式,这就是为什么你拿到的是时间戳而不是期望的日期字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:59:04