最近在作微信小程序項目,其中涉及到日曆。一直以來,遇到日曆,就是網上隨便找個插件,此次心血來潮,想着本身去實現一下。此次不是封裝功能強大,健碩完美的組件,只是記錄一下,主體思路。更多功能還得根據項目須要,本身去挖掘、實現。(大佬輕噴)git
// 獲取某年某月總共多少天
getDateLen(year, month) {
let actualMonth = month - 1;
let timeDistance = +new Date(year, month) - +new Date(year, actualMonth);
return timeDistance / (1000 * 60 * 60 * 24);
},
複製代碼
當Date做爲構造函數調用並傳入多個參數時,若是數值大於合理範圍時(如月份爲13或者分鐘數爲70),相鄰的數值會被調整。好比 new Date(2013, 13, 1)等於new Date(2014, 1, 1),它們都表示日期2014-02-01(注意月份是從0開始的)。其餘數值也是相似,new Date(2013, 2, 1, 0, 70)等於new Date(2013, 2, 1, 1, 10),都表示時間2013-03-01T01:10:00。github
// 獲取某月1號是周幾
getFirstDateWeek(year, month) {
return new Date(year, month - 1, 1).getDay()
},
複製代碼
// 獲取當月數據,返回數組
getCurrentArr(){
let currentMonthDateLen = this.getDateLen(this.data.currentYear, this.data.currentMonth) // 獲取當月天數
let currentMonthDateArr = [] // 定義空數組
if (currentMonthDateLen > 0) {
for (let i = 1; i <= currentMonthDateLen; i++) {
currentMonthDateArr.push({
month: 'current', // 只是爲了增長標識,區分上下月
date: i
})
}
}
this.setData({
currentMonthDateLen
})
return currentMonthDateArr
},
複製代碼
// 上月 年、月
preMonth(year, month) {
if (month == 1) {
return {
year: --year,
month: 12
}
} else {
return {
year: year,
month: --month
}
}
},
複製代碼
// 獲取當月中,上月多餘數據,返回數組
getPreArr(){
let preMonthDateLen = this.getFirstDateWeek(this.data.currentYear, this.data.currentMonth) // 當月1號是周幾 == 上月殘餘天數)
let preMonthDateArr = [] // 定義空數組
if (preMonthDateLen > 0) {
let { year, month } = this.preMonth(this.data.currentYear, this.data.currentMonth) // 獲取上月 年、月
let date = this.getDateLen(year, month) // 獲取上月天數
for (let i = 0; i < preMonthDateLen; i++) {
preMonthDateArr.unshift({ // 尾部追加
month: 'pre', // 只是爲了增長標識,區分當、下月
date: date
})
date--
}
}
this.setData({
preMonthDateLen
})
return preMonthDateArr
},
複製代碼
// 下月 年、月
nextMonth(year, month) {
if (month == 12) {
return {
year: ++year,
month: 1
}
} else {
return {
year: year,
month: ++month
}
}
},
複製代碼
// 獲取當月中,下月多餘數據,返回數組
getNextArr() {
let nextMonthDateLen = 42 - this.data.preMonthDateLen - this.data.currentMonthDateLen // 下月多餘天數
let nextMonthDateArr = [] // 定義空數組
if (nextMonthDateLen > 0) {
for (let i = 1; i <= nextMonthDateLen; i++) {
nextMonthDateArr.push({
month: 'next',// 只是爲了增長標識,區分當、上月
date: i
})
}
}
return nextMonthDateArr
},
複製代碼
[
{month: "pre", date: 30},
{month: "pre", date: 31},
{month: "current", date: 1},
{month: "current", date: 2},
...
{month: "current", date: 31},
{month: "next", date: 1},
{month: "next", date: 2}
]
複製代碼