欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

獲取當前月(季度/年)的最后一天(set相關(guān)操作及應(yīng)用)

 更新時間:2016年12月27日 17:10:09   作者:fe_bean  
本文主要介紹了setset相關(guān)操作及應(yīng)用,通過獲取當前月(季度/年)的最后一天具體事例來解析說明,具有一定的參考價值,下面跟著小編一起來看下吧

今天我就只說 setFullYear, setMonth, setDate,因為今天的應(yīng)用只涉及到這三個。

這3個方法顧名思義分別設(shè)置年、月、日,之前我所了解到的應(yīng)用,比如“倒計時”中設(shè)置目標時間點的時候會用到,其他的暫時記不起來,回頭再補。

今天來說說“獲取當前月(季度/年)的最后一天”的用法

你可能想到了,每個月的天數(shù)是不應(yīng)定的,有28、29(閏年2月)、30、31,總不能去算一下現(xiàn)在是幾月份,然后去arr或者map(json)里邊去找對應(yīng)的日期吧,當然這也是個方法,能達到效果(還要考慮閏年)。

那么,不這么繁瑣的話,怎么搞呢?

其實,Date本來就會自動處理每月的天數(shù),包括閏年什么的特殊情況,所以,這個我們根本不用去關(guān)心。

這里用到一個用法,估計大家有可能也用過,date.setDate(0)。沒錯,你沒看錯,就是0。(喂,這不是month啊,不用加1,你確定不是要用setDate(1) ?)

0是不存在的一天,date.setDate(0)之后,這一天不存在,或者說設(shè)置的是1號的前一天。那么,1號的前一天,自然就是前一個月的最后一天

var date = new Date();
console.log('今天是 ', date.getMonth() + 1, date.getDate());
date.setDate(0);
console.log('上個月最后一天是 ', date.getMonth() + 1, date.getDate());

控制臺跑一下上邊代碼,就會得到上個月最后一天了。

繼續(xù),我們要得到的是這個月最后一天,怎么破

先把月份設(shè)置到下個月,然后獲取這個月最后一天:

date.setMonth(date.getMonth() + 1);
date.setDate(0);

date就是這個月最后一天對應(yīng)的date對象。

到此,簡單地獲取當月最后一天已經(jīng)完了,改變setMonth可以讓你獲取任何一個月的最后一天了。

~~~~~~~~~~~~~~~~~~~~~~~~~   分割線   ~~~~~~~~~~~~~~~~~~~~~~

下面,來講獲取這一年的最后一天的date。

同理,我們只要設(shè)置到明年就可以了,然后設(shè)置月份到0月(就是1月),然后設(shè)置到0日,這樣就成了2017-01-00,也就是元旦的前一天,當然也就是2016-12-31這天了。

date.setFullYear(date.getFullYear() + 1); // 設(shè)置到明年
date.setMonth(0); // 明年的0月,也就是對應(yīng)到1月,是存在的哦,不是不存在的0
date.setDate(0); // 明年的0日

~~~~~~~~~~~~~~~~~~~~~~~~~  又來分割線   ~~~~~~~~~~~~~~~~~~~~~

然后,又到了獲取當前季度的最后一天。

Date中是沒有季度的概念的(如果有,請及時告訴我,讓我多個知識點),所以,首先我們要判斷當前月在哪個季度

var m = date.getMonth();
var quarter = Math.floor(m / 3) + 1; // 從1開始,到4
var qLastMonth = quarter * 3;

其中,quarter 是第幾季度,qLastMonth 是這個季度的最后一個月是幾月 // 從1開始到12,當年可以減去1,從0到11。

既然拿到了這個季度的最后一個月是幾月,那再用上邊的獲取任一月份的最后天的方法來處理就好了

date.setMonth(qLastMonth);
date.setDate(0);

這時候,date就是當前季度的最后一天的date對象了。當然,做一下擴展就可以拿到任意季度的最后一天,只要在第一步設(shè)置(喂喂,干嘛呢,繞遠了)

要拿到任意季度的最后一天,比如第2季度,只需要。。。 

date.setMonth(6); // 4 || 5 || 6 都行
date.setDate(0);

最后,來一個項目中遇到的實際應(yīng)用里子

是醬紫的:

  1. 獲取本季度的最后一天; 當今天是當前季度最后一天切大于15日的時候(比如6月20日),返回下個季度的最后一天。
  2. 獲取本年最后一天;當今天是大于12月15日的時候,返回明年的最后一天。

開始的實現(xiàn)代碼如下:

/**
 * 獲取 當前月/當前年/當前季度 的最后一天的date對象
 * @param {String} type 類型選擇: month/m, year/y, quarter/q
 * @return {object} 最后一天的date對象,目前只可用到天
 */
var SERVER_TIME = Date.now() / 1000; // 服務(wù)器時間,這里用本地時間代替
function getMaxDate(type) {
 var date = new Date(SERVER_TIME * 1000);
 var m = date.getMonth();
 var y = date.getFullYear();
 var d = date.getDay();
 var today = date.getDate();
 console.log(['SERVERTIME: ',y,'-',m+1,'-',today,' 星期',d].join(''));
 switch (type) {
 case 'm':
 case 'month':
  date.setMonth(m + 1);
  date.setDate(0);
  break;
 case 'y':
 case 'year':
  if (m == 11 && today >= 15) {
  date.setFullYear(y + 2);
  } else {
  date.setFullYear(y + 1);
  }
  date.setMonth(0);
  date.setDate(0);
  break;
 case 'q':
 case 'quarter':
  var qLastMonth = (Math.floor(m / 3) + 1) * 3;
  date.setMonth(qLastMonth);
  date.setDate(0);
  if (m === date.getMonth() && today >= 15) {
  date.setMonth(qLastMonth + 3);
  date.setDate(0);
  }
  break;
 default:
  date = null;
 }
 return date;
}

然后,這段代碼有個大坑,平時還不一定能遇到,這不到年底了么,它就出來了(還好不是千年蟲之類的千年一遇)

季度選擇的時候,36行或?qū)е潞筮叺?8行的代碼塊出問題。

比如第2季度,是沒有問題的。36行設(shè)置date的日到30號,即6月30日;假如滿足38行代碼邏輯的話,39-40行設(shè)置月份到9月30日,沒毛病,完美~

但是,假如現(xiàn)在是第1季度,36行設(shè)置日期到3月31日;假如滿足38行代碼邏輯的話,39-40行設(shè)置月份到6月31日,阿西吧,6月沒有31日,那么這時候得到的date,就會是~~~~沒錯,7月1日,自挖坑啊。

所以,改代碼

function getMaxDate(type) {
 var date = new Date(SERVER_TIME * 1000);
 var m = date.getMonth();
 var y = date.getFullYear();
 var d = date.getDay();
 var today = date.getDate();
 console.log(['SERVERTIME: ', y, '-', m + 1, '-', today, ' 星期', d].join(''));
 switch (type) {
 case 'm':
 case 'month':
  date.setMonth(m + 1);
  date.setDate(0);
  break;
 case 'y':
 case 'year':
  if (m == 11 && today >= 15) {
  date.setFullYear(y + 2);
  } else {
  date.setFullYear(y + 1);
  }
  date.setMonth(0);
  date.setDate(0);
  break;
 case 'q':
 case 'quarter':
  var qLastMonth = (Math.floor(m / 3) + 1) * 3;
  if (m === date.getMonth() && today >= 15) {
  date.setMonth(qLastMonth + 3);
  } else {
  date.setMonth(qLastMonth);
  }
  date.setDate(0); // 得到當前季度最后一天的date
  break;
 default:
  date = null;
 }
 return date;
}

這里得到一個注意項,月份的相關(guān)判斷,一定要在日的設(shè)置之前做好,不要再日期設(shè)置后在操作月份;或者你把日期設(shè)置到1-28之間任意數(shù)字,也就是保證不會跑到下一個月去。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • 微信小程序中使用vant組件庫的超詳細圖文教程

    微信小程序中使用vant組件庫的超詳細圖文教程

    說到vant框架相信大家應(yīng)該并不陌生了吧,做過移動端開發(fā)的小伙伴們應(yīng)該都知道它吧,下面這篇文章主要給大家介紹了關(guān)于微信小程序中使用vant組件庫的超詳細圖文教程,需要的朋友可以參考下
    2023-03-03
  • 深入解析ES6中的promise

    深入解析ES6中的promise

    ES6中的promise對象很早就聽說過,據(jù)說是為了解決我們使用回調(diào)產(chǎn)生回調(diào)地獄的問題。今天小編就帶領(lǐng)大家通過本文學(xué)習(xí)下es6中的promise,感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • 通過javascript實現(xiàn)掃雷游戲代碼實例

    通過javascript實現(xiàn)掃雷游戲代碼實例

    這篇文章主要介紹了通過javascript實現(xiàn)掃雷游戲代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • JS實現(xiàn)的4種數(shù)字千位符格式化方法分享

    JS實現(xiàn)的4種數(shù)字千位符格式化方法分享

    這篇文章主要介紹了JS實現(xiàn)的4種數(shù)字千位符格式化方法分享,本文給出了4種千分位格式化方法并對它們的性能做了比較,需要的朋友可以參考下
    2015-03-03
  • H5圖片壓縮與上傳實例

    H5圖片壓縮與上傳實例

    這篇文章主要為大家詳細介紹了H5圖片壓縮與上傳的實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 微信小程序?qū)崿F(xiàn)美團菜單

    微信小程序?qū)崿F(xiàn)美團菜單

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)美團菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 微信小程序三級聯(lián)動選擇器使用方法

    微信小程序三級聯(lián)動選擇器使用方法

    這篇文章主要為大家詳細介紹了微信小程序三級聯(lián)動選擇器使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • js防阻塞加載的實現(xiàn)方法

    js防阻塞加載的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨s防阻塞加載的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 探究JavaScript函數(shù)式編程的樂趣

    探究JavaScript函數(shù)式編程的樂趣

    本文是函數(shù)式編程系列的第一篇文章,這里我會簡要介紹一下編程范式,然后會直接介紹使用Javascript進行函數(shù)式編程的概念,需要的朋友可以參考下
    2015-12-12
  • three.js中文文檔學(xué)習(xí)之通過模塊導(dǎo)入

    three.js中文文檔學(xué)習(xí)之通過模塊導(dǎo)入

    這篇文章主要給大家介紹了關(guān)于three.js中文文檔學(xué)習(xí)之通過模塊導(dǎo)入的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或使用three.js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11

最新評論