JavaScript中如何操作Date日期变量获取指定天数前的格式化日期
你之前的写法存在两个问题:
- 直接对
Date类型的today做减法时,JS会自动将Date对象转为毫秒级时间戳再计算,得到的结果是当前时间戳减2毫秒的数值,不是间隔2天的日期 date是拼接好的字符串类型,字符串和数字做减法运算会返回NaN,无法得到预期结果
正确实现可以使用Date对象自带的setDate()方法,该方法会自动处理跨月、跨年等边界情况,无需手动计算月份天数,示例代码如下:
// 通用方法:获取n天前的日期 function getDateNDaysAgo(days) { // 新建日期对象,避免修改原有的today变量 const targetDate = new Date(); // 减去对应天数 targetDate.setDate(targetDate.getDate() - days); // 按你需要的格式拼接返回 return `${targetDate.getFullYear()}-${targetDate.getMonth() + 1}-${targetDate.getDate()}`; } // 调用测试 console.log(getDateNDaysAgo(2)); // 输出你需要的 2021-9-4
如果需要输出的月、日统一补两位前导零(比如9月显示为09,4号显示为04),可以调整格式化逻辑:
function getFormattedDateNDaysAgo(days) { const targetDate = new Date(); targetDate.setDate(targetDate.getDate() - days); const year = targetDate.getFullYear(); const month = String(targetDate.getMonth() + 1).padStart(2, '0'); const day = String(targetDate.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } console.log(getFormattedDateNDaysAgo(2)); // 输出 2021-09-04
内容的提问来源于stack exchange,提问作者Paul Viorel
相关产品推荐
相关产品推荐

