184 lines
6.3 KiB
JavaScript
184 lines
6.3 KiB
JavaScript
export default {
|
||
data() {
|
||
return {
|
||
calendar: [], //日历数组
|
||
currentDate: [], //当前日期
|
||
time:'',//选中日期
|
||
start_time:'',//开始日期
|
||
end_time:'',//结束日期
|
||
}
|
||
},
|
||
onLoad() {
|
||
let currentDate = this.currentime();
|
||
this.currentDate = currentDate;
|
||
let currentYear = currentDate[0];
|
||
let currentMonth = currentDate[1] > 9 ? currentDate[1] : '0'+currentDate[1];
|
||
let currentDay = currentDate[2] > 9 ? currentDate[2] : '0'+currentDate[2];
|
||
// 足迹01页面日期筛选默认值
|
||
this.time = `${currentYear}-${currentMonth}-${currentDay}`;
|
||
|
||
// 足迹02页面日期筛选赋值 默认三个月
|
||
// 开始时间
|
||
if(currentDate[1] > 4){
|
||
let prevMonth = currentDate[1]-3 > 9 ? currentDate[1]-3 : '0'+(currentDate[1]-3) ;
|
||
let prevDay = currentDate[2] > 9 ? currentDate[2] : '0'+currentDate[2];
|
||
this.start_time = `${currentDate[0]}-${prevMonth}-${prevDay}`;
|
||
}else{
|
||
let prevYear = currentDate[0]-1;
|
||
let prevMonth = currentDate[1]-3 + 12 > 9 ? currentDate[1]-3 + 12 : '0'+(currentDate[1]-3 + 12) ;
|
||
let prevDay = currentDate[2] > 9 ? currentDate[2] : '0'+currentDate[2];
|
||
this.start_time = `${prevYear}-${prevMonth}-${prevDay}`;
|
||
}
|
||
// 结束时间
|
||
this.end_time = `${currentYear}-${currentMonth}-${currentDay}`;
|
||
// 日历赋值
|
||
this.calendar = this.getCalendar(currentDate[0], currentDate[1]);
|
||
|
||
|
||
},
|
||
methods: {
|
||
/**
|
||
* @description 获取当前时间函数
|
||
*/
|
||
currentime() {
|
||
var date = new Date();
|
||
var y = Number(date.getFullYear());
|
||
var m = Number(date.getMonth() + 1);
|
||
var d = Number(date.getDate());
|
||
return [y, m, d];
|
||
},
|
||
/**
|
||
* @author 邓东方
|
||
* @description 获取日历
|
||
* @param {String,Number} y 年
|
||
* @param {String,Number} m 月
|
||
* @param {String,Number} currentDay 当前日 传入了显示 当前日 active == true
|
||
*/
|
||
getCalendar(y, m) {
|
||
// 求解cy年cm月cd日是星期几,parseInt代表取整 d=1是去每个月第一天
|
||
var cc = parseInt(y / 100); //c
|
||
var cy = y - cc * 100; //y
|
||
var cm = m; //m
|
||
var cd = 1; //d
|
||
// 某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算
|
||
if (m == 1 || m == 2) {
|
||
cc = parseInt((y - 1) / 100);
|
||
cy = y - 1 - cc * 100;
|
||
cm = 12 + m;
|
||
}
|
||
//w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
|
||
// var csum = y + [y / 4] + [c / 4] - 2c+[26(m + 1)/10]+d-1;
|
||
var csum = cy + parseInt(cy / 4) + parseInt(cc / 4) - 2 * cc + parseInt(26 * (cm + 1) / 10) + cd - 1;
|
||
// 注意使用蔡勒公式时出现负数情况 fd 每月第一天星期几
|
||
if (csum < 0) {
|
||
var fd = parseInt((csum % 7 + 7) % 7);
|
||
} else {
|
||
var fd = parseInt(csum % 7);
|
||
}
|
||
|
||
// 上个月天数
|
||
var cond1 = y % 4 == 0; //条件1:年份必须要能被4整除
|
||
var cond2 = y % 100 != 0; //条件2:年份不能是整百数
|
||
var cond3 = y % 400 == 0; //条件3:年份是400的倍数
|
||
//当条件1和条件2同时成立时,就肯定是闰年,所以条件1和条件2之间为“与”的关系。
|
||
//如果条件1和条件2不能同时成立,但如果条件3能成立,则仍然是闰年。所以条件3与前2项为“或”的关系。
|
||
//所以得出判断闰年的表达式:
|
||
var cond = cond1 && cond2 || cond3;
|
||
//判断当月有多少天
|
||
var allDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][m - 1];
|
||
if (cond && m == 2) {
|
||
allDays = 29;
|
||
}
|
||
//上个月是不是去年
|
||
let prevYear = y;
|
||
let prevMonth = m - 1;
|
||
if (m == 1) {
|
||
prevYear = y - 1;
|
||
prevMonth = 12;
|
||
}
|
||
let _prevMonth = prevMonth>9?prevMonth:'0'+prevMonth;
|
||
let _m = m>9?m:'0'+m;
|
||
//判断上个月天数
|
||
var prevDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][prevMonth - 1];
|
||
var arr = [];
|
||
//这里塞入上个月末尾日期
|
||
//day 日 active 是否选择 isNot 是不是这个月 formData 日期格式 isBg 是否加背景色(日期段筛选时使用)
|
||
for (let i = 1; i <= fd; i++) {
|
||
let prevDay = prevDays - fd + i;
|
||
let _prevDay = prevDay>9?prevDay:'0'+prevDay;
|
||
|
||
arr.push({
|
||
'day': prevDay,
|
||
'active': false,
|
||
'isNot': true,
|
||
'formData': prevYear + '-' + _prevMonth + '-' + _prevDay
|
||
})
|
||
}
|
||
//这里塞入正常这个月的日期
|
||
for (let i = 1; i <= allDays; i++) {
|
||
let _i = i>9?i:'0'+i;
|
||
arr.push({
|
||
'day': i,
|
||
'active': false,
|
||
'isNot': false,
|
||
'formData': y + '-' + _m + '-' + _i
|
||
})
|
||
}
|
||
//下个月是不是下一年
|
||
let nextYear = y;
|
||
let nextMonth = m + 1;
|
||
if (m == 12) {
|
||
nextYear = y + 1;
|
||
nextMonth = 1;
|
||
}
|
||
let _nextMonth = nextMonth>9?nextMonth:'0'+nextMonth;
|
||
//判断数组最后一排剩余几个位置塞入下个月日期
|
||
let takedie = arr.length % 7;
|
||
if (7 - takedie > 0 && 7 - takedie < 7) {
|
||
for (let i = 1; i <= 7 - takedie; i++) {
|
||
let _i = i>9?i:'0'+i;
|
||
arr.push({
|
||
'day': i,
|
||
'active': false,
|
||
'isNot': true,
|
||
'formData': nextYear + '-' + _nextMonth + '-' + _i
|
||
})
|
||
}
|
||
}
|
||
|
||
// 处理数组钩子
|
||
if(this.handleCalendarFn){
|
||
arr = this.handleCalendarFn(arr);
|
||
}
|
||
|
||
return arr;
|
||
},
|
||
/**
|
||
* @description 上月
|
||
*/
|
||
prevMonth() {
|
||
let currentDate = this.currentDate;
|
||
if (currentDate[1] - 1 == 0) {
|
||
currentDate = [currentDate[0] - 1, 12];
|
||
} else {
|
||
currentDate = [currentDate[0], currentDate[1] - 1];
|
||
}
|
||
this.currentDate = currentDate;
|
||
this.calendar = this.getCalendar(currentDate[0], currentDate[1]);
|
||
},
|
||
/**
|
||
* @description 下月
|
||
*/
|
||
nextMonth() {
|
||
let currentDate = this.currentDate;
|
||
if (currentDate[1] == 12) {
|
||
currentDate = [Number(currentDate[0]) + 1, 1];
|
||
} else {
|
||
currentDate = [Number(currentDate[0]), Number(currentDate[1]) + 1];
|
||
}
|
||
this.currentDate = currentDate;
|
||
this.calendar = this.getCalendar(currentDate[0], currentDate[1]);
|
||
}
|
||
}
|
||
}
|