fix: 时间快选

This commit is contained in:
kuaifan 2023-01-29 15:51:35 +08:00
parent 9df56f9556
commit 844b2afaca
4 changed files with 354 additions and 95 deletions

View File

@ -153,104 +153,386 @@
return this.formatTime(date)
},
/**
* 时间工具
*/
dateRangeUtil: {
/***
* 获得当前时间
*/
getCurrentDate() {
return new Date();
},
/***
* 获得本周起止时间
*/
getCurrentWeek() {
//起止日期数组
let startStop = [];
//获取当前时间
let currentDate = this.getCurrentDate();
//返回date是一周中的某一天
let week = currentDate.getDay();
//一天的毫秒数
let millisecond = 1000 * 60 * 60 * 24;
//减去的天数
let minusDay = week != 0 ? week - 1 : 6;
//alert(minusDay);
//本周 周一
let monday = new Date(currentDate.getTime() - (minusDay * millisecond));
//本周 周日
let sunday = new Date(monday.getTime() + (6 * millisecond));
//添加本周时间
startStop.push(monday); //本周起始时间
//添加本周最后一天时间
startStop.push(sunday); //本周终止时间
//返回
return startStop;
},
/***
* 获得本月的起止时间
*/
getCurrentMonth() {
//起止日期数组
let startStop = [];
//获取当前时间
let currentDate = this.getCurrentDate();
//获得当前月份0-11
let currentMonth = currentDate.getMonth();
//获得当前年份4位年
let currentYear = currentDate.getFullYear();
//求出本月第一天
let firstDay = new Date(currentYear, currentMonth, 1);
//当为12月的时候年份需要加1
//月份需要更新为0 也就是下一年的第一个月
if (currentMonth == 11) {
currentYear++;
currentMonth = 0; //就为
} else {
//否则只是月份增加,以便求的下一月的第一天
currentMonth++;
}
//一天的毫秒数
let millisecond = 1000 * 60 * 60 * 24;
//下月的第一天
let nextMonthDayOne = new Date(currentYear, currentMonth, 1);
//求出上月的最后一天
let lastDay = new Date(nextMonthDayOne.getTime() - millisecond);
//添加至数组中返回
startStop.push(firstDay);
startStop.push(lastDay);
//返回
return startStop;
},
/**
* 得到本季度开始的月份
* @param month 需要计算的月份
***/
getQuarterSeasonStartMonth(month) {
let spring = 0; //春
let summer = 3; //夏
let fall = 6; //秋
let winter = 9; //冬
//月份从0-11
if (month < 3) {
return spring;
}
if (month < 6) {
return summer;
}
if (month < 9) {
return fall;
}
return winter;
},
/**
* 获得该月的天数
* @param year 年份
* @param month 月份
* */
getMonthDays(year, month) {
//本月第一天 1-31
let relativeDate = new Date(year, month, 1);
//获得当前月份0-11
let relativeMonth = relativeDate.getMonth();
//获得当前年份4位年
let relativeYear = relativeDate.getFullYear();
//当为12月的时候年份需要加1
//月份需要更新为0 也就是下一年的第一个月
if (relativeMonth == 11) {
relativeYear++;
relativeMonth = 0;
} else {
//否则只是月份增加,以便求的下一月的第一天
relativeMonth++;
}
//一天的毫秒数
let millisecond = 1000 * 60 * 60 * 24;
//下月的第一天
let nextMonthDayOne = new Date(relativeYear, relativeMonth, 1);
//返回得到上月的最后一天,也就是本月总天数
return new Date(nextMonthDayOne.getTime() - millisecond).getDate();
},
/**
* 获得本季度的起止日期
*/
getCurrentSeason() {
//起止日期数组
let startStop = [];
//获取当前时间
let currentDate = this.getCurrentDate();
//获得当前月份0-11
let currentMonth = currentDate.getMonth();
//获得当前年份4位年
let currentYear = currentDate.getFullYear();
//获得本季度开始月份
let quarterSeasonStartMonth = this.getQuarterSeasonStartMonth(currentMonth);
//获得本季度结束月份
let quarterSeasonEndMonth = quarterSeasonStartMonth + 2;
//获得本季度开始的日期
let quarterSeasonStartDate = new Date(currentYear, quarterSeasonStartMonth, 1);
//获得本季度结束的日期
let quarterSeasonEndDate = new Date(currentYear, quarterSeasonEndMonth, this.getMonthDays(currentYear, quarterSeasonEndMonth));
//加入数组返回
startStop.push(quarterSeasonStartDate);
startStop.push(quarterSeasonEndDate);
//返回
return startStop;
},
/***
* 得到本年的起止日期
*
*/
getCurrentYear() {
//起止日期数组
let startStop = [];
//获取当前时间
let currentDate = this.getCurrentDate();
//获得当前年份4位年
let currentYear = currentDate.getFullYear();
//本年第一天
let currentYearFirstDate = new Date(currentYear, 0, 1);
//本年最后一天
let currentYearLastDate = new Date(currentYear, 11, 31);
//添加至数组
startStop.push(currentYearFirstDate);
startStop.push(currentYearLastDate);
//返回
return startStop;
},
/**
* 返回上一个月的第一天Date类型
* @param year
* @param month
**/
getPriorMonthFirstDay(year, month) {
//年份为0代表,是本年的第一月,所以不能减
if (month == 0) {
month = 11; //月份为上年的最后月份
year--; //年份减1
return new Date(year, month, 1);
}
//否则,只减去月份
month--;
return new Date(year, month, 1);
},
/**
* 获得上一月的起止日期
* ***/
getPreviousMonth() {
//起止日期数组
let startStop = [];
//获取当前时间
let currentDate = this.getCurrentDate();
//获得当前月份0-11
let currentMonth = currentDate.getMonth();
//获得当前年份4位年
let currentYear = currentDate.getFullYear();
//获得上一个月的第一天
let priorMonthFirstDay = this.getPriorMonthFirstDay(currentYear, currentMonth);
//获得上一月的最后一天
let priorMonthLastDay = new Date(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth(), this.getMonthDays(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth()));
//添加至数组
startStop.push(priorMonthFirstDay);
startStop.push(priorMonthLastDay);
//返回
return startStop;
},
/**
* 获得上一周的起止日期
* **/
getPreviousWeek() {
//起止日期数组
let startStop = [];
//获取当前时间
let currentDate = this.getCurrentDate();
//返回date是一周中的某一天
let week = currentDate.getDay();
//一天的毫秒数
let millisecond = 1000 * 60 * 60 * 24;
//减去的天数
let minusDay = week != 0 ? week - 1 : 6;
//获得当前周的第一天
let currentWeekDayOne = new Date(currentDate.getTime() - (millisecond * minusDay));
//上周最后一天即本周开始的前一天
let priorWeekLastDay = new Date(currentWeekDayOne.getTime() - millisecond);
//上周的第一天
let priorWeekFirstDay = new Date(priorWeekLastDay.getTime() - (millisecond * 6));
//添加至数组
startStop.push(priorWeekFirstDay);
startStop.push(priorWeekLastDay);
return startStop;
},
/**
* 得到上季度的起始日期
* year 这个年应该是运算后得到的当前本季度的年份
* month 这个应该是运算后得到的当前季度的开始月份
* */
getPriorSeasonFirstDay(year, month) {
let spring = 0; //春
let summer = 3; //夏
let fall = 6; //秋
let winter = 9; //冬
//月份从0-11
switch (month) {//季度的其实月份
case spring:
//如果是第一季度则应该到去年的冬季
year--;
month = winter;
break;
case summer:
month = spring;
break;
case fall:
month = summer;
break;
case winter:
month = fall;
break;
}
return new Date(year, month, 1);
},
/**
* 得到上季度的起止日期
* **/
getPreviousSeason() {
//起止日期数组
let startStop = [];
//获取当前时间
let currentDate = this.getCurrentDate();
//获得当前月份0-11
let currentMonth = currentDate.getMonth();
//获得当前年份4位年
let currentYear = currentDate.getFullYear();
//上季度的第一天
let priorSeasonFirstDay = this.getPriorSeasonFirstDay(currentYear, currentMonth);
//上季度的最后一天
let priorSeasonLastDay = new Date(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2, this.getMonthDays(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2));
//添加至数组
startStop.push(priorSeasonFirstDay);
startStop.push(priorSeasonLastDay);
return startStop;
},
/**
* 得到去年的起止日期
* **/
getPreviousYear() {
//起止日期数组
let startStop = [];
//获取当前时间
let currentDate = this.getCurrentDate();
//获得当前年份4位年
let currentYear = currentDate.getFullYear();
currentYear--;
let priorYearFirstDay = new Date(currentYear, 0, 1);
let priorYearLastDay = new Date(currentYear, 11, 1);
//添加至数组
startStop.push(priorYearFirstDay);
startStop.push(priorYearLastDay);
return startStop;
}
},
/**
* 获取一些指定时间
* @param str
* @param retInt
* @param retDate
* @returns {*|string}
*/
getData(str, retInt = false) {
let now = new Date(); //当前日期
let nowDayOfWeek = now.getDay(); //今天本周的第几天
let nowDay = now.getDate(); //当前日
let nowMonth = now.getMonth(); //当前月
let nowYear = now.getYear(); //当前年
nowYear += (nowYear < 2000) ? 1900 : 0;
let lastMonthDate = new Date(); //上月日期
lastMonthDate.setDate(1);
lastMonthDate.setMonth(lastMonthDate.getMonth()-1);
let lastMonth = lastMonthDate.getMonth();
let getQuarterStartMonth = () => {
let quarterStartMonth = 0;
if(nowMonth < 3) {
quarterStartMonth = 0;
}
if (2 < nowMonth && nowMonth < 6) {
quarterStartMonth = 3;
}
if (5 < nowMonth && nowMonth < 9) {
quarterStartMonth = 6;
}
if (nowMonth > 8) {
quarterStartMonth = 9;
}
return quarterStartMonth;
};
let getMonthDays = (myMonth) => {
let monthStartDate = new Date(nowYear, myMonth, 1);
let monthEndDate = new Date(nowYear, myMonth + 1, 1);
return (monthEndDate - monthStartDate)/(1000 * 60 * 60 * 24);
};
//
let time = now.getTime();
getSpecifyDate(str, retDate = false) {
let time = new Date().getTime();
switch (str) {
case '今天':
time = now;
break;
case '昨天':
time = now - 86400000;
time -= 86400 * 1000;
break;
case '前天':
time = now - 86400000 * 2;
time -= 86400 * 2000;
break;
case '本周':
time = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek);
time = $A.dateRangeUtil.getCurrentWeek()[0].getTime();
break;
case '本周结束':
time = new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek));
time = $A.dateRangeUtil.getCurrentWeek()[1].getTime();
break;
case '上周':
time = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 7);
time = $A.dateRangeUtil.getPreviousWeek()[0].getTime();
break;
case '上周结束':
time = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 1);
break;
case '本周2':
time = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + 1);
break;
case '本周结束2':
time = new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek) + 1);
break;
case '上周2':
time = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 7 + 1);
break;
case '上周结束2':
time = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 1 + 1);
time = $A.dateRangeUtil.getPreviousWeek()[1].getTime();
break;
case '本月':
time = new Date(nowYear, nowMonth, 1);
time = $A.dateRangeUtil.getCurrentMonth()[0].getTime();
break;
case '本月结束':
time = new Date(nowYear, nowMonth, getMonthDays(nowMonth));
time = $A.dateRangeUtil.getCurrentMonth()[1].getTime();
break;
case '上个月':
time = new Date(nowYear, lastMonth, 1);
time = $A.dateRangeUtil.getPreviousMonth()[0].getTime();
break;
case '上个月结束':
time = new Date(nowYear, lastMonth, getMonthDays(lastMonth));
time = $A.dateRangeUtil.getPreviousMonth()[1].getTime();
break;
case '本季度':
time = new Date(nowYear, getQuarterStartMonth(), 1);
time = $A.dateRangeUtil.getCurrentSeason()[0].getTime();
break;
case '本季度结束':
let quarterEndMonth = getQuarterStartMonth() + 2;
time = new Date(nowYear, quarterEndMonth, getMonthDays(quarterEndMonth));
time = $A.dateRangeUtil.getCurrentSeason()[1].getTime();
break;
}
if (retInt === true) {
return time;
time = $A.formatDate("Y-m-d", Math.floor(time / 1000))
if (retDate === true) {
return new Date(time);
}
return $A.formatDate("Y-m-d", parseInt(time / 1000))
return time
},
/**
@ -276,12 +558,12 @@
}, {
text: $A.L('本周'),
value() {
return [$A.getData('今天', true), lastSecond($A.getData('本周结束2', true))];
return [new Date(), lastSecond($A.getSpecifyDate('本周结束', true).getTime())];
}
}, {
text: $A.L('本月'),
value() {
return [$A.getData('今天', true), lastSecond($A.getData('本月结束', true))];
return [new Date(), lastSecond($A.getSpecifyDate('本月结束', true).getTime())];
}
}, {
text: $A.L('3天'),

View File

@ -92,13 +92,10 @@ export default {
methods: {
dateShortcuts(act) {
const lastSecond = (e) => {
return $A.Date($A.formatDate("Y-m-d 23:59:29", Math.round(e / 1000)))
};
if (act === 'prev') {
return [$A.getData('上个月', true), lastSecond($A.getData('上个月结束', true))];
return [$A.getSpecifyDate('上个月'), $A.getSpecifyDate('上个月结束')];
} else if (act === 'this') {
return [$A.getData('本月', true), lastSecond($A.getData('本月结束', true))]
return [$A.getSpecifyDate('本月'), $A.getSpecifyDate('本月结束')]
}
},

View File

@ -84,13 +84,10 @@ export default {
methods: {
dateShortcuts(act) {
const lastSecond = (e) => {
return $A.Date($A.formatDate("Y-m-d 23:59:29", Math.round(e / 1000)))
};
if (act === 'prev') {
return [$A.getData('上个月', true), lastSecond($A.getData('上个月结束', true))];
return [$A.getSpecifyDate('上个月'), $A.getSpecifyDate('上个月结束')];
} else if (act === 'this') {
return [$A.getData('本月', true), lastSecond($A.getData('本月结束', true))]
return [$A.getSpecifyDate('本月'), $A.getSpecifyDate('本月结束')]
}
},

View File

@ -90,23 +90,6 @@ export default {
},
ruleData: {},
dateOptions: {
shortcuts: [
{
text: this.$L('上个月'),
value() {
return [$A.getData('上个月', true), this.lastSecond($A.getData('上个月结束', true))];
}
},
{
text: this.$L('这个月'),
value() {
return [$A.getData('本周', true), this.lastSecond($A.getData('本月结束', true))];
}
}
]
},
allUserShow: false,
exportShow: false,
}