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

如何在JavaScript中将日期运算结果格式化为dd/mm/yyyy格式?

问题原因

  • 你代码里的getDay()/setDay()是操作星期的方法,getDay()返回值为0-6对应周日到周六,不是你要的月份日期,操作月份中的日期应该用getDate()/setDate()
  • JS中Date对象的所有set*系列方法返回值都是修改后日期对应的毫秒时间戳,且会直接修改原Date对象本身,你不需要用返回的时间戳做格式化,直接用修改后的Date对象即可。

解决方法

你可以自己实现格式化逻辑,无需依赖第三方库,完整实现代码如下:

// 1. 先处理录入的dd/mm/yyyy格式字符串转Date对象的通用方法
function parseEntryDate(dateStr) {
  const [day, month, year] = dateStr.split('/').map(Number)
  return new Date(year, month - 1, day) // 月份要减1,JS Date月份从0开始计数
}

// 2. 日期格式化为dd/mm/yyyy的通用方法
function formatToDMY(date) {
  const day = String(date.getDate()).padStart(2, '0')
  const month = String(date.getMonth() + 1).padStart(2, '0') // 月份加1转回1-12
  const year = date.getFullYear()
  return `${day}/${month}/${year}`
}

// 实际使用示例
const mydateEntry = parseEntryDate('01/04/2021') // 对应你原来的2021年4月1日
// 减2周(14天)
mydateEntry.setDate(mydateEntry.getDate() - 14)
// 减3个月
mydateEntry.setMonth(mydateEntry.getMonth() - 3)
// 格式化输出
const formattedResult = formatToDMY(mydateEntry)
console.log(formattedResult)

额外说明

如果需要保留运算过程中的中间日期,每次运算前可以新构造一个Date对象复制原有值,避免修改原对象:

const dateAfterSubDays = new Date(mydateEntry)
dateAfterSubDays.setDate(dateAfterSubDays.getDate() -14)
const dateAfterSubMonths = new Date(dateAfterSubDays)
dateAfterSubMonths.setMonth(dateAfterSubMonths.getMonth() -3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:09:00