近来工作中遇到这样的两个需求
1. 给个Date对象,找出该时间所在月的第一天和最后一天
2. 给个Date对象,找出该时间所在周的第一天和最后一天
需求1中的找月第一天很简单,我记得api中有setDate方法可以使用
使用setDate方法前,先看看getDate
1 | var date = new Date(); |
可见getDate返回的是一个月中的第几天(从1开始)
这就好办了。通过setDate(1) 天设为第一天就好了(返回的是毫秒数)
1 | new Date(date.setDate(1)); |
返回的当月第一天
那么最后一天怎么办,哈哈,取月,看本月多少天,如果是2月还要判断是否是闰年。麻烦。其实在使用setDate的时候,本以为参数是从0开始的,结果出现的这个情况
1 | var date = new Date(); |
设置setDate(0)之后不是刚开始想的本月第一天,而是上个月最后一天(以前不知道啊)
然后就想到了这个办法
1 | var date = new Date(); |
成功得一个月的最后一天,
如果设置setDate(-1)将得到上个月倒数第二天
1 | var date = new Date(); |
月的第一天最后一天是找着了。那周的第一天和最后一天呢?
javascript中是提供了getDay方法,没有提供setDay方法啊,没关系,一周总共7天不会变,不像一个月,有时30天,有时31天,还有28,29天
getDay返回值是0(周日)—— 6(周六)
如此可用如下方法
1 | var date = new Date(); |
如此就解决的上面的问题了
ps: 后来又尝试了setMonth()中参数的设置 0(1月) —— 11(12月)
如果设置-1,-2 或者13呢?
1 | var date = new Date(); |
可见返回了去年的最后一个月(12月), 如果设置-2则是返回去年倒数第二个月(11月)
1 | var date = new Date(); |
设置12则返回了下一年的第一个月(1月),如果设置13返回下一年的第二个月(2月)
如果当前日期是31号比如2015-10-31,此时如果用setMonth将月份设置为9月,得到的将会是哪天呢?会是2015-09-30么?试一下就知道了
1 | var date = new Date(2015, 09, 31); |
没有得到 2015-09-30
而是得到了2015-10-01,就是因为10月比9月多一天,如果从某个日期设置到2月,得到的可能就是3月1号,3月2号,3月3号了
吐槽一下:
为什么getMonth, getDay, getHours, getMinutes, getSeconds,getMillseconds返回值都是从0开始,而偏偏getDate返回值是从1开始,这么特殊