179 行
4.3 KiB
Plaintext
179 行
4.3 KiB
Plaintext
import { Lunar, LunarInfoType } from './calendar.uts'
|
|
|
|
export type DateType = {
|
|
fullDate : string;
|
|
year : number;
|
|
month : number;
|
|
date : number;
|
|
day : number;
|
|
disabled : boolean;
|
|
lunar : string;
|
|
is_today : boolean;
|
|
data ?: LunarInfoType
|
|
}
|
|
|
|
export class Calendar {
|
|
private lunar:Lunar
|
|
constructor() {
|
|
this.lunar =new Lunar()
|
|
}
|
|
|
|
getDateInfo(time : string = '') : DateType {
|
|
const nowDate = this.getDate(time)
|
|
const lunar = this.getlunar(nowDate.year, nowDate.month, nowDate.date)
|
|
const item : DateType = nowDate
|
|
item.data = lunar
|
|
return item
|
|
}
|
|
|
|
/**
|
|
* 获取每周数据
|
|
* @param {Object} dateData
|
|
*/
|
|
getWeeks(dateData : string = '') : Array<Array<DateType>> {
|
|
const dateObj = this.getDate(dateData)
|
|
const year = dateObj.year
|
|
const month = dateObj.month
|
|
let firstDay = new Date(year, month - 1, 0).getDay()
|
|
// 获取本月天数
|
|
let currentDay = new Date(year, month, 0).getDate()
|
|
// 上个月末尾几天
|
|
const lastMonthDays = this._getLastMonthDays(firstDay, dateObj)
|
|
// 本月天数
|
|
const currentMonthDys = this._currentMonthDys(currentDay, dateObj)
|
|
// 本月剩余天数
|
|
const surplus = 42 - (lastMonthDays.length + currentMonthDys.length)
|
|
// 下个月开始几天
|
|
const nextMonthDays = this._getNextMonthDays(surplus, dateObj)
|
|
// const weeks = []
|
|
|
|
// 本月所有日期格子合并
|
|
let days : Array<DateType> = []
|
|
for (let i = 0; i < lastMonthDays.length; i++) {
|
|
const item = lastMonthDays[i]
|
|
days.push(item)
|
|
}
|
|
for (let i = 0; i < currentMonthDys.length; i++) {
|
|
const item = currentMonthDys[i]
|
|
days.push(item)
|
|
}
|
|
for (let i = 0; i < nextMonthDays.length; i++) {
|
|
const item = nextMonthDays[i]
|
|
days.push(item)
|
|
}
|
|
let weeks : Array<Array<DateType>> = []
|
|
// 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天
|
|
for (let i = 0; i < days.length; i += 7) {
|
|
const item : Array<DateType> = days.slice(i, i + 7)
|
|
weeks.push(item);
|
|
}
|
|
return weeks
|
|
}
|
|
|
|
/**
|
|
* 获取上月剩余天数
|
|
*/
|
|
_getLastMonthDays(firstDay : number, full : DateType) : Array<DateType> {
|
|
let dateArr : Array<DateType> = []
|
|
for (let i = firstDay; i > 0; i--) {
|
|
const month = full.month - 1
|
|
const beforeDate = new Date(full.year, month, -i + 1).getDate()
|
|
let nowDate = full.year + '-' + month + '-' + beforeDate
|
|
|
|
let item : DateType = this.getDate(nowDate)
|
|
item.disabled = true
|
|
|
|
dateArr.push(item)
|
|
}
|
|
return dateArr
|
|
}
|
|
|
|
/**
|
|
* 获取本月天数
|
|
*/
|
|
_currentMonthDys(dateData : number, full : DateType) : Array<DateType> {
|
|
|
|
let dateArr : Array<DateType> = []
|
|
for (let i = 1; i <= dateData; i++) {
|
|
let nowDate = full.year + '-' + full.month + '-' + i
|
|
let item : DateType = this.getDate(nowDate)
|
|
item.disabled = false
|
|
|
|
dateArr.push(item)
|
|
}
|
|
return dateArr
|
|
}
|
|
|
|
/**
|
|
* 获取下月天数
|
|
*/
|
|
_getNextMonthDays(surplus : number, full : DateType) : Array<DateType> {
|
|
let dateArr : Array<DateType> = []
|
|
for (let i = 1; i < surplus + 1; i++) {
|
|
const month = full.month + 1
|
|
let nowDate = full.year + '-' + month + '-' + i
|
|
let item : DateType = this.getDate(nowDate)
|
|
item.disabled = true
|
|
|
|
dateArr.push(item)
|
|
}
|
|
return dateArr
|
|
}
|
|
|
|
/**
|
|
* 计算阴历日期显示
|
|
*/
|
|
getlunar(year : number, month : number, date : number) : LunarInfoType {
|
|
return this.lunar.solar2lunar(year, month, date)
|
|
}
|
|
|
|
|
|
/**
|
|
* 获取任意时间
|
|
*/
|
|
getDate(date : string = '', AddDayCount : number = 0, str : string = 'day') : DateType {
|
|
let dd : Date = new Date()
|
|
if (date !== '') {
|
|
const datePart = date.split(" ");
|
|
const dateData = datePart[0].split("-");
|
|
const year = parseInt(dateData[0])
|
|
const month = parseInt(dateData[1])
|
|
const day = parseInt(dateData[2])
|
|
|
|
dd = new Date(year, month - 1, day)
|
|
}
|
|
|
|
switch (str) {
|
|
case 'day':
|
|
dd.setDate(dd.getDate() + AddDayCount);
|
|
break;
|
|
case 'month':
|
|
dd.setMonth(dd.getMonth() + AddDayCount);
|
|
break;
|
|
case 'year':
|
|
dd.setFullYear(dd.getFullYear() + AddDayCount);
|
|
break;
|
|
}
|
|
|
|
const y = dd.getFullYear();
|
|
const m = dd.getMonth() + 1;
|
|
const d = dd.getDate();
|
|
|
|
let nowDate = y + '-' + m + '-' + d
|
|
const lunarData = this.getlunar(y, m, d)
|
|
|
|
const dataObj : DateType = {
|
|
fullDate: nowDate,
|
|
year: y,
|
|
month: m,
|
|
date: d,
|
|
day: dd.getDay() + 1,
|
|
lunar: lunarData.IDayCn,
|
|
is_today: lunarData.isToday,
|
|
disabled: false
|
|
}
|
|
|
|
return dataObj
|
|
}
|
|
|
|
} |