为什么80%的码农都做不了架构师?>>>
在前端代码中难免会涉及到时间的操作,如何构造一个Date对象呢?javascript为我们提供如下几种方式:
new Date("month dd,yyyy hh:mm:ss");new Date("month dd,yyyy");new Date(yyyy,mth,dd,hh,mm,ss);new Date(yyyy,mth,dd);new Date(ms);
其中:
- month:用英文表示月份名称,从January到December
- mth:用整数表示月份,从0(1月)到11(12月)
- dd:表示一个月中的第几天,从1到31
- yyyy:四位数表示的年份
- hh:小时数,从0(午夜)到23(晚11点)
- mm:分钟数,从0到59的整数
- ss:秒数,从0到59的整数
- ms:毫秒数,为大于等于0的整数
构造函数中部分参数为负数的情况:
>new Date(1990,11,-1)
>Thu Nov 29 1990 00:00:00 GMT+0800 (中国标准时间)
>new Date(1990,10,-1)
>Tue Oct 30 1990 00:00:00 GMT+0800 (中国标准时间)
>new Date(1990,10,-2)
>Mon Oct 29 1990 00:00:00 GMT+0800 (中国标准时间)
>new Date(1990,-1,-2)
>Tue Nov 28 1989 00:00:00 GMT+0800 (中国标准时间)
>new Date(1990,-1,0)
>Thu Nov 30 1989 00:00:00 GMT+0800 (中国标准时间)
上面的结果,你可能会有疑惑,不急,且跟我一起往下看:
在月份小于0时,构造函数会在月份为0的基础上,向上X月,如:
new Date(2015,-1,1) Mon Dec 01 2014 00:00:00 GMT+0800 (中国标准时间)
在日小于1时,构造函数会在天数为1的基础上,向上X天,如:
new Date(2015,0,0) Wed Dec 31 2014 00:00:00 GMT+0800 (中国标准时间)
如果两者都为负数,可以先计算月,再计算日,得出正确结果,如:
new Date(2015,-1,0) Sun Nov 30 2014 00:00:00 GMT+0800 (中国标准时间)
如果月大于11,日大于当月天数,自动向后推移,如(2015年2月份只有28天):
new Date(2015,1,29) Sun Mar 01 2015 00:00:00 GMT+0800 (中国标准时间)
也就是说在开发过程中,我们完全可以使用new Date(yyyy,mm,dd)构造函数提供的这一特性,完成上一日,下一日,上一月,下一月这样的日期操作。
上一日:
new Date(yyyy,mm,dd-1)
下一日:
new Date(yyyy,mm,dd+1)
上一月:
new Date(yyyy,mm-1,dd)
下一月:
new Date(yyyy,mm+1,dd)
在IE9、Chrome及Firefox浏览器实测通过。 Date对象的其他方法