js实现dateadd
JavaScript 实现 DateAdd 功能
在 JavaScript 中,没有内置的 DateAdd 函数,但可以通过 Date 对象的方法来实现类似功能。以下是几种常见的实现方式:

使用原生 Date 方法
通过 Date 对象的 set 和 get 方法可以轻松实现日期加减:

function dateAdd(date, interval, units) {
let result = new Date(date);
switch (interval.toLowerCase()) {
case 'year':
result.setFullYear(result.getFullYear() + units);
break;
case 'month':
result.setMonth(result.getMonth() + units);
break;
case 'day':
result.setDate(result.getDate() + units);
break;
case 'hour':
result.setHours(result.getHours() + units);
break;
case 'minute':
result.setMinutes(result.getMinutes() + units);
break;
case 'second':
result.setSeconds(result.getSeconds() + units);
break;
case 'millisecond':
result.setMilliseconds(result.getMilliseconds() + units);
break;
default:
throw new Error('Unknown interval');
}
return result;
}
// 示例用法
const now = new Date();
console.log(dateAdd(now, 'day', 5)); // 5天后
console.log(dateAdd(now, 'month', -2)); // 2个月前
使用时间戳加减
通过获取时间戳进行毫秒级别的加减:
function dateAdd(date, interval, units) {
const msPerUnit = {
year: 365 * 24 * 60 * 60 * 1000,
month: 30 * 24 * 60 * 60 * 1000,
day: 24 * 60 * 60 * 1000,
hour: 60 * 60 * 1000,
minute: 60 * 1000,
second: 1000,
millisecond: 1
};
if (!msPerUnit[interval.toLowerCase()]) {
throw new Error('Unknown interval');
}
return new Date(date.getTime() + units * msPerUnit[interval.toLowerCase()]);
}
使用 date-fns 库
对于更复杂的日期操作,可以使用流行的日期库 date-fns:
import { addYears, addMonths, addDays, addHours, addMinutes, addSeconds } from 'date-fns';
function dateAdd(date, interval, units) {
const fnMap = {
year: addYears,
month: addMonths,
day: addDays,
hour: addHours,
minute: addMinutes,
second: addSeconds
};
const fn = fnMap[interval.toLowerCase()];
if (!fn) throw new Error('Unknown interval');
return fn(date, units);
}
注意事项
- 月份加减时,JavaScript 的
setMonth会自动处理跨年情况 - 天数加减时,
setDate会自动处理跨月情况 - 夏令时变更可能会影响小时级别的时间计算
- 对于精确的商业日期计算,建议使用专门的日期库如 date-fns 或 moment.js
这些方法可以根据具体需求选择使用,原生方法适合简单场景,而库函数则能处理更复杂的日期计算需求。






