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

在TypeScript中如何正确计算当前日期加X个月或30天?

TypeScript中正确计算日期偏移并格式化输出

你遇到的问题是因为手动修改月份、日期数值时,没有利用Date对象自带的自动日期进位机制,导致出现13月、36天这类非法日期值。Date对象本身支持直接调整日期,并自动处理跨月、跨年的情况,以下是正确的实现方式:

一、添加X个月

使用setUTCMonth方法,它会自动处理月份溢出(比如12月加1会自动切换到次年1月):

// 获取当前UTC日期
const dateObj = new Date();
// 复制原日期,避免修改原对象
const newDateObj = new Date(dateObj);
// 添加1个月(可替换为任意X值)
newDateObj.setUTCMonth(newDateObj.getUTCMonth() + 1);

// 格式化为 MM/DD/YYYY
const formattedDate = `${newDateObj.getUTCMonth() + 1}/${newDateObj.getUTCDate()}/${newDateObj.getUTCFullYear()}`;
console.log(formattedDate);

二、添加指定天数

使用setUTCDate方法,自动处理日期溢出(比如月底加天数会自动跳转到下月):

const dateObj = new Date();
const newDateObj = new Date(dateObj);
// 添加30天(可替换为任意天数)
newDateObj.setUTCDate(newDateObj.getUTCDate() + 30);

// 格式化为 MM/DD/YYYY
const formattedDate = `${newDateObj.getUTCMonth() + 1}/${newDateObj.getUTCDate()}/${newDateObj.getUTCFullYear()}`;
console.log(formattedDate);

三、封装通用工具函数(可选)

如果需要重复使用日期偏移和格式化逻辑,可以封装成函数:

// 格式化UTC日期为 MM/DD/YYYY
function formatUTCDate(date: Date): string {
  const month = date.getUTCMonth() + 1;
  const day = date.getUTCDate();
  const year = date.getUTCFullYear();
  return `${month}/${day}/${year}`;
}

// 添加X个月的函数
function addMonths(date: Date, months: number): Date {
  const newDate = new Date(date);
  newDate.setUTCMonth(newDate.getUTCMonth() + months);
  return newDate;
}

// 添加指定天数的函数
function addDays(date: Date, days: number): Date {
  const newDate = new Date(date);
  newDate.setUTCDate(newDate.getUTCDate() + days);
  return newDate;
}

// 使用示例
const today = new Date();
console.log(formatUTCDate(addMonths(today, 2))); // 当前日期加2个月
console.log(formatUTCDate(addDays(today, 30))); // 当前日期加30天

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:15:39