From 844b2afaca9972835df8a4d5df53f158aaa13671 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Sun, 29 Jan 2023 15:51:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=97=B6=E9=97=B4=E5=BF=AB=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/assets/js/functions/web.js | 418 +++++++++++++++--- .../pages/manage/components/CheckinExport.vue | 7 +- .../js/pages/manage/components/TaskExport.vue | 7 +- .../setting/components/SystemCheckin.vue | 17 - 4 files changed, 354 insertions(+), 95 deletions(-) diff --git a/resources/assets/js/functions/web.js b/resources/assets/js/functions/web.js index 9699cd3ea..3dcd280d0 100755 --- a/resources/assets/js/functions/web.js +++ b/resources/assets/js/functions/web.js @@ -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天'), diff --git a/resources/assets/js/pages/manage/components/CheckinExport.vue b/resources/assets/js/pages/manage/components/CheckinExport.vue index 00ef1626e..9c4858e3e 100644 --- a/resources/assets/js/pages/manage/components/CheckinExport.vue +++ b/resources/assets/js/pages/manage/components/CheckinExport.vue @@ -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('本月结束')] } }, diff --git a/resources/assets/js/pages/manage/components/TaskExport.vue b/resources/assets/js/pages/manage/components/TaskExport.vue index 18dced26d..1da1844cb 100644 --- a/resources/assets/js/pages/manage/components/TaskExport.vue +++ b/resources/assets/js/pages/manage/components/TaskExport.vue @@ -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('本月结束')] } }, diff --git a/resources/assets/js/pages/manage/setting/components/SystemCheckin.vue b/resources/assets/js/pages/manage/setting/components/SystemCheckin.vue index d06c2199d..faf4e8056 100644 --- a/resources/assets/js/pages/manage/setting/components/SystemCheckin.vue +++ b/resources/assets/js/pages/manage/setting/components/SystemCheckin.vue @@ -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, }