摘要:想閱讀更多優(yōu)質(zhì)文章請猛戳博客一年百來篇優(yōu)質(zhì)文章等著你為了更好的講這節(jié)的內(nèi)容,提示一個(gè)處理日期的小技巧,想獲取上個(gè)月最后一天,只需要設(shè)置參數(shù)為即可。
想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你!
為了更好的講這節(jié)的內(nèi)容,提示一個(gè) JS 處理日期的小技巧,想獲取上個(gè)月最后一天,只需要設(shè)置SetDate參數(shù)為0即可。
var endDate = new Date(); //上個(gè)月最后一天 endDate.setDate(0);
接著正文開始:
使用 JS 獲取當(dāng)前月的最后一天,咱們通常的思路先獲取下個(gè)月的第一天,然后在減去一天,就是當(dāng)前月的最后一天,所以自然會(huì)用到下面的代碼:
var date= new Date(); date.setMonth(date.getMonth() + 1); //日期設(shè)置為0號, 0表示1號的前一天 let lastDay = date.setDate(0); console.log("最后一天:" + new Date(lastDay).toLocaleString())
我寫此文的日期是2019.08.21,所以打印結(jié)果如下:
最后一天:2019/8/31 下午4:10:43
那這樣的算法有沒有bug,咱們并不確定,所以為了還原現(xiàn)場,現(xiàn)在咱們從2019.01.31一個(gè)一個(gè)來試試
var date= new Date(2019, 0, 31); //0 表示1月 date.setMonth(date.getMonth() + 1); // 日期設(shè)置為0號, 0表示1號的前一天 let lastDay = date.setDate(0); console.log("最后一天:" + new Date(lastDay).toLocaleString())
打印:
最后一天:2019/2/28 上午12:00:00
咱們可以看到,我們把 1月31號往后撥一個(gè)月在往前減一天,理應(yīng)得到的是 1月31號,實(shí)際得到的是 2月28號,所以咱們寫的代碼是有bug的。
這又是怎么肥事?
咱們可以列出月份:
1月 1 ....... 28 29 30 31 2月 1 ....... 28 3月 1 ....... 28 29 30 31
咱們通過 month + 1,在 JS 中會(huì)理解成:
當(dāng)前日期 + 當(dāng)月的天數(shù)
所以上例中的 date.setMonth(date.getMonth() + 1) 等價(jià)于 1月31號 + 31天 ,根據(jù)上面的列表,就可以看到結(jié)果是3月3號
所以不要認(rèn)為 month + 1 就是月份加 1,它的意思是當(dāng)前日期加上當(dāng)月天數(shù) 。
那要怎么保證多了不會(huì)多跳一個(gè)月呢?
只要保證 month + 1 之前不會(huì)超過28號就行啦,那要怎么做到呢?
推算:
31號 + 31 會(huì)超
30號 + 31 會(huì)超
29號 + 31 會(huì)超
28號 + 31 還是 28 號 剛好
所以秘訣在把31號回?fù)艿?b>28號就行啦,所以多加以下這句話就行了:
date.setDate(28)
完整代碼:
var date= new Date(2019, 0, 31); //0 表示1月 date.setDate(28) date.setMonth(date.getMonth() + 1); // 日期設(shè)置為0號, 0表示1號的前一天 let lastDay = date.setDate(0); console.log("最后一天:" + new Date(lastDay).toLocaleString())
運(yùn)行結(jié)果:
最后一天:2019/1/31 上午12:00:00
代碼部署后可能存在的BUG沒法實(shí)時(shí)知道,事后為了解決這些BUG,花了大量的時(shí)間進(jìn)行l(wèi)og 調(diào)試,這邊順便給大家推薦一個(gè)好用的BUG監(jiān)控工具 Fundebug。
交流
干貨系列文章匯總?cè)缦拢X得不錯(cuò)點(diǎn)個(gè)Star,歡迎 加群 互相學(xué)習(xí)。
https://github.com/qq44924588...
我是小智,公眾號「大遷世界」作者,對前端技術(shù)保持學(xué)習(xí)愛好者。我會(huì)經(jīng)常分享自己所學(xué)所看的干貨,在進(jìn)階的路上,共勉!
關(guān)注公眾號,后臺回復(fù)福利,即可看到福利,你懂的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/106866.html
摘要:使用中的對象已經(jīng)很久了但是一直以來都沒有將常用的封裝函數(shù)和遇到的坑記錄下來趁著今天有空就記錄下來方便自己下次直接使用并提醒自己遇到過那些坑。利用設(shè)置日期時(shí)從設(shè)置當(dāng)設(shè)置為時(shí)即上個(gè)月的最后一天參考 使用JS中的Date對象已經(jīng)很久了,但是一直以來都沒有將常用的封裝函數(shù)和遇到的坑記錄下來,趁著今天有空,就記錄下來,方便自己下次直接使用,并提醒自己遇到過那些坑。如果有哪些地方不對,希望大家能夠...
摘要:雖然大家都用過這個(gè)時(shí)間選擇控件,但是卻很少有人去研究其中原理。最近這邊本人利用閑暇時(shí)間自己寫了一個(gè)時(shí)間選擇控件,借這個(gè)時(shí)間選擇控件向各位同學(xué)們闡述這個(gè)時(shí)間選擇控件的原理。 前言 ??說到這個(gè)時(shí)間選擇控件,網(wǎng)上有很多各式各樣的,相信很多同學(xué)們也都有用過,所以大家對這個(gè)也不陌生。雖然大家都用過這個(gè)時(shí)間選擇控件,但是卻很少有人去研究其中原理。最近這邊本人利用閑暇時(shí)間自己寫了一個(gè)時(shí)間選擇控件,...
摘要:實(shí)際上,如果直接將表示日期的字符串傳遞給構(gòu)造函數(shù),也會(huì)在后臺調(diào)用方法,例如下面的代碼跟前面的是等價(jià)的。構(gòu)造函數(shù)構(gòu)造函數(shù)會(huì)模仿但有一點(diǎn)不同的是,日期和時(shí)間都是基于本地時(shí)區(qū)而非來創(chuàng)建。兼容性問題啊其原因就是非標(biāo)準(zhǔn)日期格式。 一:Date類型介紹 要?jiǎng)?chuàng)建一個(gè)日期對象,使用new操作符和Date構(gòu)造函數(shù)即可: var now = new Date(); Date.parse()方法 其中Da...
閱讀 1476·2023-04-26 00:08
閱讀 809·2021-11-23 18:51
閱讀 1683·2021-11-12 10:34
閱讀 1018·2021-10-14 09:43
閱讀 509·2021-08-18 10:23
閱讀 2589·2019-08-30 15:55
閱讀 3399·2019-08-30 11:05
閱讀 2799·2019-08-29 12:50