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,因为是相对调整,所以用哪一个是没有区别的。
希望此文对你有所帮助。
最新评论
写的挺好的
有没有兴趣翻译 impatient js? https://exploringjs.com/impatient-js/index.html
Flexbox playground is so great!
感谢总结。
awesome!
这个好像很早就看到类似的文章了
比其他的教程好太多了
柯理化讲的好模糊…没懂