js实现dateadd
实现 DateAdd 功能
在 JavaScript 中实现类似 VBScript 的 DateAdd 函数,可以通过扩展 Date 原型或创建独立函数来完成。以下是几种实现方式:

扩展 Date 原型方法
Date.prototype.dateAdd = function(interval, number) {
let date = new Date(this);
switch (interval.toLowerCase()) {
case 'yyyy': date.setFullYear(date.getFullYear() + number); break;
case 'q': date.setMonth(date.getMonth() + (number * 3)); break;
case 'm': date.setMonth(date.getMonth() + number); break;
case 'w': date.setDate(date.getDate() + (number * 7)); break;
case 'd': date.setDate(date.getDate() + number); break;
case 'h': date.setHours(date.getHours() + number); break;
case 'n': date.setMinutes(date.getMinutes() + number); break;
case 's': date.setSeconds(date.getSeconds() + number); break;
case 'ms': date.setMilliseconds(date.getMilliseconds() + number); break;
}
return date;
};
// 使用示例
let now = new Date();
let futureDate = now.dateAdd('d', 5); // 加5天
独立工具函数实现
function dateAdd(date, interval, units) {
let ret = new Date(date);
const checkRollover = () => {
if (ret.getDate() != date.getDate()) ret.setDate(0);
};
switch (interval.toLowerCase()) {
case 'year': ret.setFullYear(ret.getFullYear() + units); break;
case 'quarter': ret.setMonth(ret.getMonth() + 3*units); checkRollover(); break;
case 'month': ret.setMonth(ret.getMonth() + units); checkRollover(); break;
case 'week': ret.setDate(ret.getDate() + 7*units); break;
case 'day': ret.setDate(ret.getDate() + units); break;
case 'hour': ret.setTime(ret.getTime() + units*3600000); break;
case 'minute': ret.setTime(ret.getTime() + units*60000); break;
case 'second': ret.setTime(ret.getTime() + units*1000); break;
default: ret = undefined; break;
}
return ret;
}
处理月份边界情况
当处理月份加减时,需要考虑月末日期的情况:
function addMonths(date, months) {
let d = new Date(date);
let day = d.getDate();
d.setMonth(d.getMonth() + months);
if (d.getDate() != day) d.setDate(0);
return d;
}
// 示例:1月31日加1个月会返回2月28日(或29日)
let jan31 = new Date(2023, 0, 31);
let feb28 = addMonths(jan31, 1);
使用现成库
对于复杂日期操作,推荐使用现成的日期库:
- Moment.js(已停止维护但仍可用)
- date-fns(模块化现代方案)
- Day.js(轻量替代方案)
// 使用date-fns示例
import { addDays, addMonths } from 'date-fns';
let newDate = addDays(new Date(), 7);
let newMonth = addMonths(new Date(), 2);







