javascript中神奇的 Date对象小结
Date对象算是较常用的对象之一,但很多人完全不会操作,就算一些简单的操作也用moment而不自己尝试一下。
本次分享下Date中的date使用技巧,希望能给大家启发。
MDN官网介绍
setDate()方法根据本地时间来指定一个日期对象的天数。
如果dayValue超出了月份的合理范围,setDate将会相应地更新Date对象。
例如,如果为dayValue指定0,那么日期就会被设置为上个月的最后一天。
获取月份天数
//获取月份天数 functiongetMonthDayCount(year,month){ returnnewDate(year,month,0).getDate(); } console.log(getMonthDayCount(2017,10));//31
Date第三个参数的本质跟setDate是一样的。
因为date为0时自动退到上个月的最后一天,所以这里月份也不需要减,正好的。
获取所有月份天数
functiongetAllMonthDayCount(year){ vardays=[31,newDate(year,2,0).getDate(),31,30,31,30,31,31,30,31,30,31]; returndays; } console.log(getAllMonthDayCount(2016));//[31,29,31,30,31,30,31,31,30,31,30,31]
这个算是上面的延伸,不多解释。
是否是闰年
functionisLeapYear(year){ return(year%4==0)&&(year%100!=0||year%400==0); }
这是网上的代码,相信大多数人都用。
但其实你真的理解或者能记住么?
反正我不能。。
functionisLeapYear(year){ returnnewDate(year,2,0).getDate()===29; } console.log([ isLeapYear(2000), isLeapYear(2016), isLeapYear(2017), isLeapYear(2018) ]);//[true,true,false,false]
这样看,是不是就非常简单容易理解了。
而且都不需要记,是不是想忘都忘不了?
天数加减操作
之前看到有人用相对秒数在计算几天前或几天后,甚至还在算跨月,跨年的情况。
其实直接setDate就好了,自动处理跨月,跨年的情况。
//10天后是几月几号 vardt=newDate('2016-12-25'); dt.setDate(dt.getDate()+10); console.log(dt.toLocaleDateString());//2017/1/4 //10天前是几月几号 vardt=newDate('2017-01-04'); dt.setDate(dt.getDate()-10); console.log(dt.toLocaleDateString());//2016/12/25
小结
虽然这些东西很基础,说方法名,可能大家都知道,但很多人却依然不会去使用。
就跟用jq却依然for循环处理结果一样。
这里只列举了部分例子,也许会有其他神奇的操作技巧等你去发现。