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

如何在JavaScript中将短日期格式转换为ISO日期且不修改日期值?

JavaScript 转换短日期为ISO格式(仅保留原日期)

问题场景

从接口请求返回的数据里,ReceivedDate字段是"26/12/2022"(日/月/年)格式的短日期,需要将其转换为2022-12-26的ISO日期格式,但当前直接用new Date()会生成当前时间,完全不符合需求,要实现只改格式、不改动原日期的转换。

请求代码

const { data } = await axios.post(`${ur}`, body_object);

响应示例

"ReceivedDate": "26/12/2022"

当前错误代码

data.ReceivedDate = new Date();
console.log(data.ReceivedDate) // 输出: 2023-03-21T00:38:39.169Z

期望输出

2022-12-26

可行方案

方案1:拆分字符串手动拼接(最稳妥,无时区问题)

直接拆分原始日期字符串的日、月、年部分,再按ISO格式拼接,完全规避Date构造函数的时区和解析歧义问题:

const rawDate = data.ReceivedDate;
// 按斜杠分割为日、月、年
const [day, month, year] = rawDate.split('/');
// 补零后拼接成yyyy-mm-dd格式
data.ReceivedDate = `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`;
console.log(data.ReceivedDate); // 输出: 2022-12-26

padStart(2, '0')用于确保月份和日期始终是两位数字,比如5/3/2023会被转为2023-03-05。

方案2:构造Date对象后提取日期(需注意时区)

如果需要生成Date对象再转换格式,要正确传入年、月、日参数(注意JavaScript的月份是从0开始计数的,所以要减1):

const rawDate = data.ReceivedDate;
const [day, month, year] = rawDate.split('/');
// 构造正确的Date对象,月份减1
const dateInstance = new Date(year, month - 1, day);
// 转换为ISO字符串后截取前10位
data.ReceivedDate = dateInstance.toISOString().slice(0, 10);
console.log(data.ReceivedDate); // 输出: 2022-12-26

⚠️ 注意:这种方法受时区影响,如果你的运行环境时区与目标日期的时区不一致,可能会出现日期偏移(比如UTC-8时区下,本地日期可能被解析为前一天的UTC时间,导致toISOString()输出错误日期),所以优先推荐方案1。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:20:14