JavaScript 中为 Date 类实现 DateAdd 方法

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,因为是相对调整,所以用哪一个是没有区别的。

希望此文对你有所帮助。

xujiwei

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>