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

前端如何将ISO 8601、MM/DD/YYYY日期转换为YYYY-MM-DD格式?

前端日期格式转换解决方案

一、处理JSON中的"MM/DD/YYYY"格式日期

针对JSON里类似"9/11/2001"的日期字符串,可通过拆分、补零后拼接成YYYY-MM-DD格式:

function formatMMDDYYYY(dateStr) {
  const [month, day, year] = dateStr.split('/');
  const paddedMonth = month.padStart(2, '0');
  const paddedDay = day.padStart(2, '0');
  return `${year}-${paddedMonth}-${paddedDay}`;
}

// 调用示例
const rawDate = "9/11/2001";
const formatted = formatMMDDYYYY(rawDate); // 输出 "2001-09-11"

二、处理ISO 8601格式日期

不管是接口返回的2001-09-10T21:00:00.000Z,还是通过input[type="date"]获取的日期对象,都可以用以下两种方式转换:

方式1:直接截取字符串(简单高效,适合标准ISO格式)

如果确定输入是标准ISO 8601字符串,直接截取前10位即可得到YYYY-MM-DD:

function formatISOToDate(isoStr) {
  return isoStr.slice(0, 10);
}

// 调用示例
const isoDate = "2001-09-10T21:00:00.000Z";
const formatted = formatISOToDate(isoDate); // 输出 "2001-09-10"

方式2:通过Date对象处理(解决时区偏移问题)

如果需要考虑时区差异,比如要获取本地时区对应的日期,可借助Date对象的方法:

function formatISOWithTimezone(isoStr) {
  const date = new Date(isoStr);
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需+1
  const day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
}

// 调用示例
const isoDate = "2001-09-10T21:00:00.000Z";
const formatted = formatISOWithTimezone(isoDate); // 根据本地时区输出对应日期,比如东八区会输出"2001-09-11"

处理input[type="date"]的日期

如果是直接获取输入框的value,本身已经是YYYY-MM-DD格式,无需转换;如果通过valueAsDate拿到Date对象,可复用上面的formatISOWithTimezone方法,或者直接拼接:

const dateInput = document.querySelector('input[type="date"]');

// 直接取value(已为YYYY-MM-DD)
const dateValue = dateInput.value;

// 从Date对象转换
const dateObj = dateInput.valueAsDate;
const formattedDate = `${dateObj.getFullYear()}-${String(dateObj.getMonth()+1).padStart(2,'0')}-${String(dateObj.getDate()).padStart(2,'0')}`;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:37:24