JavaScript 中为 Date 类实现 DateAdd 方法

作者:xujiwei 来源:HotHeart's BLOG 时间:2008-04-03 16:19:00 

JavaScript 中的并没有提供像 VBScript 里的 DateAdd 方法用于日期的操作,像加一年,减一个月什么的,这在服务端经常用到,比如设置 Cookie 的到期时间为现在时间的后一年,那么就需要使用这个方法了。

虽然 JavaScript 中没有 DateAdd 方法,但是 Date 类却有设置年月日时分秒的方法,比如 setFullYear、setMonth 之类的,而且,这些个方法的参数是可以为负的,在设置之后, Date 类会自行进行调整,每个月是30天还是31天,年份是不是闰年都不用我们来管了,只管设置值就是。

有了这个特性之后,我们就可以很方便的来为 Date 类添加 add 方法了。之所以不添加一个 DateAdd 方法而是给 Date 类添加一个 add 方法是因为我觉得那样更加方便,当然你也可以将 Date 类的 add 方法转换成为一个全局函数 DateAdd。

为了对每一个 Date 类的实例都有效,这里用到了 prototype 对象。

在 VBScript 里的 DateAdd 方法是用一个字符串来控制所加的量是年还是月还是其他的,所以在这里我也模仿 VBScript 里的 DateAdd 方法,使用一个字符串来控制所加量对应的部分,比如 y 代表年,m 代表月。

最后得到的代码如下:

Date.prototype.add = function(part, value) {
    value *= 1;
    if(isNaN(value)) {
        value = 0;
    }
    switch(part) {
        case "y":
            this.setUTCFullYear(this.getUTCFullYear() + value);
            break;
        case "m":
            this.setUTCMonth(this.getUTCMonth() + value);
            break;
        case "d":
            this.setUTCDate(this.getUTCDate() + value);
            break;
        case "h":
            this.setUTCHours(this.getUTCHours() + value);
            break;
        case "n":
            this.setUTCMinutes(this.getUTCMinutes() + value);
            break;
        case "s":
            this.setUTCSeconds(this.getUTCSeconds() + value);
            break;
        default:
    }
}

代码里的 getUTCFullYear 等等也可以换成通常用的 getFullYear,因为是相对调整,所以用哪一个是没有区别的。

希望此文对你有所帮助。

转载说明:未经特别说明内容转载时请务必以超链接形式标明文章原始出处和作者信息及本声明

标签:date,dateadd,javascript,类
0
投稿

猜你喜欢

  • PyQt5入门之基于QListWidget版本实现图片缩略图列表功能

    2023-07-15 08:32:52
  • 详解Python多线程Selenium跨浏览器测试

    2023-05-05 08:10:11
  • ThinkPHP5.0框架控制器继承基类和自定义类示例

    2024-05-03 15:52:24
  • 详解Vue2 SSR 缓存 Api 数据

    2023-07-02 17:09:06
  • Python爬虫设置代理IP的方法(爬虫技巧)

    2023-08-08 22:05:36
  • mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法

    2023-11-18 06:10:15
  • python集合的创建、添加及删除操作示例

    2022-07-09 13:29:38
  • 解决python xlrd无法读取excel文件的问题

    2022-01-25 10:48:44
  • 基于Python Dash库制作酷炫的可视化大屏

    2022-09-13 14:20:32
  • Anaconda入门使用总结

    2023-02-06 20:11:18
  • Go语言实现JSON解析的神器详解

    2024-05-28 15:23:17
  • Python中pip工具的安装以及使用

    2023-12-12 18:42:37
  • laravel容器延迟加载以及auth扩展详解

    2024-06-05 09:45:06
  • mysql存储过程如何利用临时表返回结果集

    2024-01-13 07:39:05
  • pyecharts绘制各种数据可视化图表案例附效果+代码

    2022-07-08 08:30:03
  • MySQL 整表加密解决方案 keyring_file详解

    2024-01-18 07:50:31
  • Windows 安装 Anaconda3+PyCharm的方法步骤

    2023-05-21 07:40:53
  • 浅谈Django REST Framework限速

    2022-04-09 20:54:46
  • 简单介绍Python虚拟环境及使用方法

    2021-03-19 20:59:53
  • 为什么从Python 3.6开始字典有序并效率更高

    2021-03-26 15:29:36
  • asp之家 网络编程 m.aspxhome.com