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

JS如何将出生日期格式从YYYY/MM/DD改为DD/MM/YYYY或DD-MM-YYYY

解决方案(以优先需求DD-MM-YYYY格式为例)

仅需要修改4处代码即可,原有格式化核心逻辑无需调整:

  1. 替换格式化配置变量
    把原来的DATE_FORMAT和DATE_PLACEHOLDER修改为:
const DATE_FORMAT = '**-**-****'
const DATE_PLACEHOLDER = 'DD-MM-YYYY'

如果需要退而求其次的DD/MM/YYYY格式,就改成:

const DATE_FORMAT = '**/**/****'
const DATE_PLACEHOLDER = 'DD/MM/YYYY'
  1. 修改验证规则的正则表达式
    找到出生日期校验部分的正则,替换为匹配DD-MM-YYYY的规则:
if (/^\d\d-\d\d-\d\d\d\d$/.test(field.value)) {

如果是DD/MM/YYYY格式就替换为:

if (/^\d\d\/\d\d\/\d\d\d\d$/.test(field.value)) {
  1. 调整日期拆分顺序
    原来的拆分是按年/月/日顺序,现在改为按日/月/年顺序读取:
let [dd, mm, yyyy] = field.value.split('-').map(p => parseInt(p, 10))

如果是DD/MM/YYYY格式就把分隔符换成/:

let [dd, mm, yyyy] = field.value.split('/').map(p => parseInt(p, 10))

完整修改后的代码参考

格式化部分代码

'use strict'
// DD-MM-YYYY格式配置
const DATE_FORMAT = '**-**-****'
const DATE_PLACEHOLDER = 'DD-MM-YYYY'

const birthdate = document.querySelector('#birthdate')
function DoFormat(x, pattern, mask) {
  var strippedValue = x.replace(/[^0-9]/g, '')
  var chars = strippedValue.split('')
  var count = 0

  var formatted = ''
  for (let i = 0; i < pattern.length; i++) {
    const c = pattern[i]
    if (chars[count]) {
      if (/\*/.test(c)) {
        formatted += chars[count]
        count++
      } else {
        formatted += c
      }
    } else if (mask) {
      if (mask.split('')[i])
        formatted += mask.split('')[i]
    }
  }
  return formatted;
}

function Format() {
  const val = DoFormat(birthdate.value, DATE_FORMAT)
  birthdate.value = DoFormat(birthdate.value, DATE_FORMAT, DATE_PLACEHOLDER)

  if (birthdate.createTextRange) {
    var range = birthdate.createTextRange()
    range.move('character', val.length)
    range.select()
  } else if (birthdate.selectionStart) {
    birthdate.focus()
    birthdate.setSelectionRange(val.length, val.length)
  }
}

Format()

birthdate.addEventListener('input', Format)

校验部分代码

if (field.id === 'birthdate') {
  // 匹配DD-MM-YYYY格式
  if (/^\d\d-\d\d-\d\d\d\d$/.test(field.value)) {
    // 按日、月、年的顺序拆分
    let [dd, mm, yyyy] = field.value.split('-').map(p => parseInt(p, 10))
    mm -= 1
    const date = new Date(yyyy, mm, dd)
    if (date.getMonth() === mm && date.getDate() === dd && date.getFullYear() === yyyy) {
      if (date.getFullYear() >= LOWEST_YEAR && date.getFullYear() <= HIGHEST_YEAR) {
        return true
      }
    }
  }

  this.Error(field)
  return false
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:48:02