獲取某個月的天數,這個題通常都是在學 switch(){}
一章的案例。面試
咱們一直解題的方案是根據一個順口溜:一三五七八十臘,31天永不差,四六九十一,每個月30天,唯有二月二十八,閏年要把日加一。(我搜的,具體怎麼揹我忘了)app
這裏面還有個閏年的計算規則:四年一閏,百年不閏,四百年再閏。能夠被4整除,可是不能被100整除,除非能夠被400整除。測試
是否是被上面的魔性概念征服了?接來下咱們來實現一下spa
function getMonthCountDay(year, month){ // year 爲年份,month 爲月份 } [[2000,2],[2000,1],[2000,3],[2000,4],[2100,2],[2100,1],[2100,3],[2100,4],[2104,2],[2104,1],[2104,3],[2104,4],[2105,2],[2105,1],[2105,3],[2105,4],].map(v=>`${v} => ${getMonthCountDay.apply(null,v)}天`)
根據咱們的順口溜咱們來寫一下3d
function getMonthCountDay (year, month) { switch (month){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31 case 4: case 6: case 9: case 11: return 30 case 2: return year%400==0?(29):(year%4!=0||year%100==0?28:29) } }
很好寫完了,除了代碼看上去多了點,沒別的毛病。code
Date
API 處理日期溢出特性(進位)接下來就開始騷了。blog
function getMonthCountDay (year, month) { return 32 - new Date(year, month-1, 32).getDate() }
是否是想不到,這種方法寫的一下就不多了。utf-8
js 中 Date 在處理時間的時候會作進位退位操做。get
Date
API 處理日期溢出特性(退位方案)剛纔是用的進位,而後減去多餘的。如今咱們改用退位input
function getMonthCountDay (year, month) { return new Date(year, month, 0).getDate() }
js 中 Date 在處理時間的時候會作進位退位操做。