yurong/components/wn-calendar/calendar.js

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
}