如何在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
相关产品推荐
相关产品推荐

