JS日期處理——月末、季度末

需求: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

http://momentjs.cn/

安裝:

npm install moment --save

ok\(^o^)/~就寫到這裏,季度年度的寫法相似就不贅述了,若是有錯誤或者能夠更簡單的寫法歡迎指出。

相關文章
相關標籤/搜索