/* *计算每个月有几周 */ const weekMethods = (date) => { let fristDay = date; let endDay = getCurrentMonthLastDay(fristDay).getDate(); let dayArr = []; let week = fristDay.getDay(); if (week == 0) { dayArr = test(endDay, 6, dayArr); } else if (week == 1) { dayArr = test(endDay, 5, dayArr); } else if (week == 2) { dayArr = test(endDay, 4, dayArr); } else if (week == 3) { dayArr = test(endDay, 3, dayArr); } else if (week == 4) { dayArr = test(endDay, 2, dayArr); } else if (week == 5) { dayArr = test(endDay, 1, dayArr); } else if (week == 6) { dayArr = test(endDay, 0, dayArr); } return dayArr; }; const test = (endDay, num, arr) => { if (num != 6) { arr.push({ startDay: "01", endDay: "0" + (1 + num) }) } else { arr.push({ startDay: "01", endDay: "07" }) } for (let i = 1 + num + 1; i < endDay + 1; i = i + 7) { let obj = {}; if (i == endDay) { obj = { startDay: i, endDay: i }; } else if (i + 6 > endDay) { obj = { startDay: i, endDay: endDay }; } else { obj = { startDay: i > 10 ? i : "0" + i, endDay: i + 6 > 10 ? i + 6 : "0" + (i + 6) }; } arr.push(obj); } arr.forEach((item, index) => { item.text = "第" + (index + 1) + "周(" + item.startDay + "-" + item.endDay + ")" item.value = index + 1 }) return arr; }; /** * 获取当前月的最后一天 * */ const getCurrentMonthLastDay = (date) => { // let date = new Date(); let currentMonth = date.getMonth(); let nextMonth = ++currentMonth; let nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1); let oneDay = 1000 * 60 * 60 * 24; let lastTime = new Date(nextMonthFirstDay - oneDay); return lastTime; }; /** * 年循环 */ // export const yearLoop = (minDate, maxDate) => { // let yearArr = []; // if (!minDate) { // minDate = new Date().getFullYear() - 5; // } // if (!maxDate) { // maxDate = minDate + 10; // } // for (let i = minDate; i < maxDate; i++) { // yearArr.push({ // text: i + "年", // value: i, // children: monthLoop(i), // }); // } // return yearArr // }; /*** * 根据月循环 */ const monthLoop = (year) => { let month = []; for (let i = 1; i < 13; i++) { month.push({ text: i + "月", value: i >9 ? i : '0' + i }); } month.forEach((item, index) => { let date = new Date(year, index, 1); item.children = weekMethods(date); }); return month }; /** * 格式化时间为:yyyy-MM-dd HH:mm:ss * @param date * @returns {string} */ function jsDateFormatter (date,type) { var seperator1 = "-"; var seperator2 = ":"; var month = date.getMonth() + 1; var strDate = date.getDate(); if (month >= 1 && month <= 9) { month = "0" + month; } if (strDate >= 0 && strDate <= 9) { strDate = "0" + strDate; } if(type == 'date'){ var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate; return currentdate; } var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate + " " + date.getHours() + seperator2 + date.getMinutes()+ seperator2 + date.getSeconds(); return currentdate; } function getDiffDay(date_1, date_2) { // 计算两个日期之间的差值 let totalDays,diffDate let myDate_1 = Date.parse(date_1) let myDate_2 = Date.parse(date_2) // 将两个日期都转换为毫秒格式,然后做差 diffDate = Math.abs(myDate_1 - myDate_2) // 取相差毫秒数的绝对值 totalDays = Math.floor(diffDate / (1000 * 3600 * 24)) // 向下取整 // console.log(totalDays) return totalDays // 相差的天数 } export const getWeekDays = (start,end) => { let arr = [] let days = getDiffDay(start,end) let startDate = new Date(start) for (let i = 0; i <= days;i++) { let itemDate = new Date(startDate) itemDate.setDate(startDate.getDate()+(i)); itemDate = new Date(itemDate) let weekDayName = getWeekdayName(itemDate.getDay(),itemDate) arr.push({ day: itemDate.getDate(), weekday: itemDate.getDay(), weekdayName: weekDayName, date: itemDate, str: `${itemDate.getFullYear()}${itemDate.getMonth()}${itemDate.getDate()}`, isActive: weekDayName == '今日' }) } return arr } export const getWeekdayName = (weekday,date) => { let current = new Date() let diff = getDiffDay(jsDateFormatter(date,'date'),jsDateFormatter(current,'date')) if(diff == 0) return '今日' switch (weekday) { case 1: return '一' case 2: return '二' case 3: return '三' case 4: return '四' case 5: return '五' case 6: return '六' case 0: return '日' default: return '未知' } } export const getCurrentWeekByDate = (date) => { if(!date) date = (new Date()).toDateString() let dateObj = new Date(date) let weekIndex = dateObj.getDay() if(weekIndex == 0) weekIndex = 7 let leftDayCount = weekIndex - 1; let rightDayCount = 7 - weekIndex; let leftDateList = [] let rightDateList = [] for (let i = leftDayCount;i>0;i--){ let newDate = new Date(dateObj.toDateString()) newDate = newDate.setDate(newDate.getDate() - i) newDate = new Date(newDate) leftDateList.push(newDate) } for (let i = 1;i<= rightDayCount;i++){ let newDate = new Date(dateObj.toDateString()) newDate = newDate.setDate(newDate.getDate() + i) newDate = new Date(newDate) rightDateList.push(newDate) } return [...leftDateList,dateObj,...rightDateList] } export const getDateFormatOfCN = (date) => { date = new Date(date) let year = date.getFullYear() let month = date.getMonth() + 1 let day = date.getDate() return `${year}年${month}月${day}日` } export const dateFormater = (formater, t)=>{ let date = t ? new Date(t) : new Date(), Y = date.getFullYear() + '', M = date.getMonth() + 1, D = date.getDate(), H = date.getHours(), m = date.getMinutes(), s = date.getSeconds(); return formater.replace(/YYYY|yyyy/g,Y) .replace(/YY|yy/g,Y.substring(2,2)) .replace(/MM/g,(M<10?'0':'') + M) .replace(/DD/g,(D<10?'0':'') + D) .replace(/HH|hh/g,(H<10?'0':'') + H) .replace(/mm/g,(m<10?'0':'') + m) .replace(/ss/g,(s<10?'0':'') + s) }