当前位置:首页 > 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实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现二叉树

js实现二叉树

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

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…