需求:npm
不少时候对于页面设置默认日期,咱们有这样的需求——测试
日期频度为月度:若是今天是本月最后一天,默认日期取今天,不然取上月最后一天;spa
日期频度为季度:若是今天是本季度最后一天,默认日期取今天,不然取上季度最后一天翻译
……code
咱们以月度为例,按需求写出伪代码:orm
得到当前年、月、日 得到本月最后一日 if(当前日==本月最后一日){ 取值=当前年+月+日 }else{ 取值=当前年+上月+上月最后一日 }
如上关键,咱们须要知道如何根据当前年月得到该月的最后一天是几号。blog
var lastDay=(y,m)=>(new Date(y,m,0).getDate())
运行测试以下,可见这是个还不错的方法。get
如今咱们用js翻译一下上面的伪代码:ast
var getDafaultDate=()=>{ var today = new Date(); var y = today.getFullYear(); var m = today.getMonth()+1; var d = today.getDate(); var lastD = lastDay(y,m); var defaultDate = `${y}-${m}-${d}`; if(d!=lastD){ defaultDate = `${y}-${m-1}-${lastDay(y,m-1)}`; } return defaultDate ; }
可见今天是2019/11/29,执行以下:form
这里咱们发现代码中有点漏洞呀,假现在天是2020/1/1,结果岂不是要变成‘2020-0-31’。
因此咱们须要加一句处理:
var getDafaultDate=()=>{ var today = new Date(); var y = today.getFullYear(); var m = today.getMonth()+1; var d = today.getDate(); varformat lastD = lastDay(y,m); var defaultDate = `${y}-${m}-${d}`; if(d!=lastD){ //如果1月 取上年12月末 if(m==1){ y=y-1; m=12; }else{ m=m-1; } defaultDate = `${y}-${m-1}-${lastDay(y,m-1)}`; } return defaultDate ; }
而后而后而后,你要说须要‘YYYY-MM-DD’的格式,若是月份日期是一位数不行blabla……那你就写一个格式化嘛ε=(´ο`*)))
这里咱们能够用moment.js和format()试试:
import moment from 'moment';
... ...
defaultDate = moment(defaultDate,'YYYY/MM/DD').format('YYYY-MM-DD');
其实这个moment.js有不少实用的方法,好比说咱们以前须要”获取一个月的最后一天”……
想要了解的小伙伴能够官网看看API
安装:
npm install moment --save
ok\(^o^)/~就写到这里,季度年度的写法相似就不赘述了,若是有错误或者能够更简单的写法欢迎指出。