国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 10:56:18
字體:
來源:轉載
供稿:網友

為了更好的講這節的內容,提示一個 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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿城市| 泰宁县| 电白县| 贺州市| 双牌县| 长兴县| 玛纳斯县| 苏尼特右旗| 丰顺县| 勃利县| 毕节市| 延安市| 乳山市| 金沙县| 阳西县| 张家川| 唐山市| 尖扎县| 甘洛县| 宿州市| 永寿县| 武夷山市| 嘉定区| 榆林市| 伊吾县| 抚顺县| 贞丰县| 凤山县| 汤阴县| 岳阳市| 清镇市| 清水县| 孟津县| 芦山县| 开平市| 瓦房店市| 陇川县| 五莲县| 达州市| 西乡县| 恩平市|