当前位置:首页 > JavaScript

js实现dateadd

2026-02-01 15:52:44JavaScript

实现 DateAdd 功能

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

js实现dateadd

扩展 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);

js实现dateadd

标签: jsdateadd
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableElem…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Paren…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScri…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点…