当前位置:首页 > JavaScript

js实现dateadd

2026-02-01 15:52:44JavaScript

实现 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);

使用现成库

对于复杂日期操作,推荐使用现成的日期库:

js实现dateadd

  • 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);

标签: jsdateadd
分享给朋友:

相关文章

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…