国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS 在獲取當前月的最后一天遇到的坑

zollero / 3326人閱讀

摘要:想閱讀更多優質文章請猛戳博客一年百來篇優質文章等著你為了更好的講這節的內容,提示一個處理日期的小技巧,想獲取上個月最后一天,只需要設置參數為即可。

想閱讀更多優質文章請猛戳GitHub博客,一年百來篇優質文章等著你!

為了更好的講這節的內容,提示一個 JS 處理日期的小技巧,想獲取上個月最后一天,只需要設置SetDate參數為0即可。

var endDate = new Date();
//上個月最后一天
endDate.setDate(0);

接著正文開始:

使用 JS 獲取當前月的最后一天,咱們通常的思路先獲取下個月的第一天,然后在減去一天,就是當前月的最后一天,所以自然會用到下面的代碼:

var date= new Date();
date.setMonth(date.getMonth() + 1);
//日期設置為0號, 0表示1號的前一天
let lastDay = date.setDate(0);
console.log("最后一天:" + new Date(lastDay).toLocaleString())

我寫此文的日期是2019.08.21,所以打印結果如下:

最后一天:2019/8/31 下午4:10:43

那這樣的算法有沒有bug,咱們并不確定,所以為了還原現場,現在咱們從2019.01.31一個一個來試試

var date= new Date(2019, 0, 31); //0 表示1月
date.setMonth(date.getMonth() + 1);
// 日期設置為0號, 0表示1號的前一天
let lastDay = date.setDate(0);
console.log("最后一天:" + new Date(lastDay).toLocaleString())

打印:

最后一天:2019/2/28 上午12:00:00

咱們可以看到,我們把 1月31號往后撥一個月在往前減一天,理應得到的是 1月31號,實際得到的是 2月28號,所以咱們寫的代碼是有bug的。

這又是怎么肥事?

咱們可以列出月份:

1月   1 ....... 28 29 30 31
2月   1 ....... 28 
3月   1 ....... 28 29 30 31

咱們通過 month + 1,在 JS 中會理解成:

當前日期 + 當月的天數

所以上例中的 date.setMonth(date.getMonth() + 1) 等價于 1月31號 + 31天 ,根據上面的列表,就可以看到結果是3月3號

所以不要認為 month + 1 就是月份加 1,它的意思是當前日期加上當月天數

那要怎么保證多了不會多跳一個月呢?

只要保證 month + 1 之前不會超過28號就行啦,那要怎么做到呢?

推算:

31號 + 31 會超

30號 + 31 會超

29號 + 31 會超

28號 + 31 還是 28 號 剛好

所以秘訣在把31號回撥到28號就行啦,所以多加以下這句話就行了:

date.setDate(28)

完整代碼:

var date= new Date(2019, 0, 31); //0 表示1月
date.setDate(28)
date.setMonth(date.getMonth() + 1);
// 日期設置為0號, 0表示1號的前一天
let lastDay = date.setDate(0);
console.log("最后一天:" + new Date(lastDay).toLocaleString())    

運行結果:

最后一天:2019/1/31 上午12:00:00    

代碼部署后可能存在的BUG沒法實時知道,事后為了解決這些BUG,花了大量的時間進行log 調試,這邊順便給大家推薦一個好用的BUG監控工具 Fundebug。

交流

干貨系列文章匯總如下,覺得不錯點個Star,歡迎 加群 互相學習。

https://github.com/qq44924588...

我是小智,公眾號「大遷世界」作者,對前端技術保持學習愛好者。我會經常分享自己所學所看的干貨,在進階的路上,共勉!

關注公眾號,后臺回復福利,即可看到福利,你懂的。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106866.html

相關文章

  • Date對象常用的封裝方法及遇到的坑

    摘要:使用中的對象已經很久了但是一直以來都沒有將常用的封裝函數和遇到的坑記錄下來趁著今天有空就記錄下來方便自己下次直接使用并提醒自己遇到過那些坑。利用設置日期時從設置當設置為時即上個月的最后一天參考 使用JS中的Date對象已經很久了,但是一直以來都沒有將常用的封裝函數和遇到的坑記錄下來,趁著今天有空,就記錄下來,方便自己下次直接使用,并提醒自己遇到過那些坑。如果有哪些地方不對,希望大家能夠...

    taowen 評論0 收藏0
  • 帶你輕松搞定時間選擇控件原理

    摘要:雖然大家都用過這個時間選擇控件,但是卻很少有人去研究其中原理。最近這邊本人利用閑暇時間自己寫了一個時間選擇控件,借這個時間選擇控件向各位同學們闡述這個時間選擇控件的原理。 前言 ??說到這個時間選擇控件,網上有很多各式各樣的,相信很多同學們也都有用過,所以大家對這個也不陌生。雖然大家都用過這個時間選擇控件,但是卻很少有人去研究其中原理。最近這邊本人利用閑暇時間自己寫了一個時間選擇控件,...

    tigerZH 評論0 收藏0
  • JS基礎篇--日期Date詳解與實例擴展

    摘要:實際上,如果直接將表示日期的字符串傳遞給構造函數,也會在后臺調用方法,例如下面的代碼跟前面的是等價的。構造函數構造函數會模仿但有一點不同的是,日期和時間都是基于本地時區而非來創建。兼容性問題啊其原因就是非標準日期格式。 一:Date類型介紹 要創建一個日期對象,使用new操作符和Date構造函數即可: var now = new Date(); Date.parse()方法 其中Da...

    Apollo 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<