129 lines
2.1 KiB
JavaScript
129 lines
2.1 KiB
JavaScript
/**
|
|
*
|
|
*/
|
|
|
|
function getDays(year, month, data, isLess) {
|
|
if (!Array.isArray(data)) {
|
|
data = []
|
|
}
|
|
|
|
let today = new Date()
|
|
|
|
let y, m
|
|
if (typeof(year) === 'number' && year > 2000 && typeof(month) === 'number') {
|
|
const d = new Date(year, month - 1)
|
|
y = d.getFullYear()
|
|
m = d.getMonth()
|
|
} else {
|
|
y = today.getFullYear()
|
|
m = today.getMonth()
|
|
}
|
|
|
|
let st = new Date(y, m, 1).getDay(),
|
|
ed = new Date(y, m + 1, 0).getDay(),
|
|
len = new Date(y, m + 1, 0).getDate()
|
|
|
|
let isfill = data.length > 0
|
|
let days = Array.from(new Array(len), (x, i) => {
|
|
i = i + 1
|
|
const date = `${y}/${m+1}/${i}`
|
|
x = null
|
|
if (isfill) {
|
|
x = data.find(item => item.date === date)
|
|
}
|
|
return {
|
|
show: true,
|
|
label: i,
|
|
date,
|
|
data: x
|
|
}
|
|
})
|
|
|
|
let prev = new Date(y, m - 1),
|
|
prevDate = `${prev.getFullYear()}/${prev.getMonth()+1}`,
|
|
prevLd = new Date(y, m, 0).getDate()
|
|
let prevDays = Array.from(new Array(st), (x, i) => {
|
|
i = prevLd - (st - 1 - i)
|
|
return {
|
|
show: false,
|
|
label: isLess ? '' : i,
|
|
date: `${prevDate}/${i}`
|
|
}
|
|
})
|
|
days = prevDays.concat(days)
|
|
|
|
let next = new Date(y, m + 1),
|
|
nextDate = `${next.getFullYear()}/${next.getMonth()+1}`
|
|
let lened = (days.length <= 35 ? 7 : 0) + (6 - ed)
|
|
if (isLess) {
|
|
lened = 6 - ed
|
|
}
|
|
let nextDays = Array.from(new Array(lened), (x, i) => {
|
|
i = i + 1
|
|
return {
|
|
show: false,
|
|
label: isLess ? '' : i,
|
|
date: `${nextDate}/${i}`
|
|
}
|
|
})
|
|
days = days.concat(nextDays)
|
|
|
|
days = days.concat(Array.from(new Array(42 - days.length), (x, i) => {
|
|
return {
|
|
show: false,
|
|
label: '',
|
|
date: `*${i}`
|
|
}
|
|
}))
|
|
|
|
return {
|
|
days,
|
|
year: y,
|
|
month: m
|
|
}
|
|
}
|
|
|
|
function getEn (m) {
|
|
const en = [
|
|
'Jan',
|
|
'Feb',
|
|
'Mar',
|
|
'Apr',
|
|
'May',
|
|
'Jun',
|
|
'Jul',
|
|
'Aug',
|
|
'Sept',
|
|
'Oct',
|
|
'Nov',
|
|
'Dec',
|
|
]
|
|
return en[m - 1]
|
|
}
|
|
|
|
const labels_en = [
|
|
'S',
|
|
'M',
|
|
'T',
|
|
'W',
|
|
'T',
|
|
'F',
|
|
'S',
|
|
]
|
|
|
|
const labels_zh = [
|
|
'日',
|
|
'一',
|
|
'二',
|
|
'三',
|
|
'四',
|
|
'五',
|
|
'六',
|
|
]
|
|
|
|
export default {
|
|
getDays,
|
|
getEn,
|
|
labels_en,
|
|
labels_zh
|
|
} |