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

JavaScript如何将不同格式日期统一转换为YYYY-mm-dd字符串格式

日期格式统一处理方案

原有代码问题

  • 拼接顺序错误:原有代码按照「日-月-年」顺序拼接,不符合要求的「年-月-日」格式
  • 未补前导零:1月、3日这类个位数的月/日会被转为1、3而非01、03,不符合YYYY-mm-dd的双位格式要求
  • 额外拼接了时分字段,多出不需要的内容
  • 未做输入格式前置判断,不管输入是否已经符合要求都做了转换,反而可能导致格式错误

实现逻辑

  1. 首先通过正则校验输入是否已经是合法的YYYY-mm-dd格式,符合要求直接返回原值
  2. 不符合格式的输入传入Date对象解析
  3. 对月、日做前导零补全,按照YYYY-mm-dd格式拼接返回
  4. 增加非法日期输入的校验逻辑,避免异常

完整实现代码

function formatDate(inputDate) {
  // 正则校验是否为合法的YYYY-mm-dd格式(同时校验月、日的合法范围)
  const ymdFormatReg = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/
  if (ymdFormatReg.test(inputDate)) {
    return inputDate
  }

  const date = new Date(inputDate)
  // 校验是否为合法可解析的日期
  if (isNaN(date.getTime())) {
    throw new Error('无效的日期输入')
  }

  // 按本地时区拼接日期,需要UTC时区的话替换为getUTCFullYear、getUTCMonth、getUTCDate即可
  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')

  return `${year}-${month}-${day}`
}

使用示例

// 已经是YYYY-mm-dd格式直接返回
formatDate('2020-01-01') // 返回 '2020-01-01'
// 长日期格式自动转换
formatDate('Wed Jan 01 2020 00:00:00 GMT-0800') // 返回 '2020-01-01'

内容的提问来源于stack exchange,提问作者Nathan Leggatt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:24:02